Zmieniam niektóre metody z $(selector).live("click", function(){});
do $(selector).on("click", function(){});
.
Na początku wygląda na to, że działa dokładnie tak samo. Ale kiedy wstawię nowy HTML do DOM, nowe elementy wstawione z tym samym selektorem, nie będą przechwytywać $(selector).on("click", function(){});
i zanim zostały złapane metodą live ().
czemu? "Czegoś mi brakuje?
Odpowiedzi:
4 dla odpowiedzi № 1.on
przyjmuje inny zestaw parametrów w porównaniu do .live
. Nie możesz po prostu zastąpić jednego drugim (i .$(selector).on.live
nie ma sensu)
Poprawna składnia to:
$(document).on("click", selector, function(){});
Spowoduje to powiązanie wszystkich pasujących elementów selector
bez względu na to, kiedy zostaną dodane do DOM.
Uwaga:
Zamiast document
można użyć elementu nadrzędnego elementu, o ile ten element nadrzędny pozostaje w modelu DOM.
Na przykład:
<div id="myDiv">
<p>Hello World</p>
<p>Hello World</p>
</div>
Następnie możesz zrobić:
$("#myDiv").on("click", "p", function(){});
Zdarzenie click będzie wyzwalać dla wszystkich <p>
Tagi dodane do #myDiv
.
Uwaga:
$(selector).on("click", function(){})
jest taki sam jak robienie
$(selector).bind("click", function(){})
(jQuery 1.7.1 sugeruje użycie .on
zamiast .bind
)