/ Metoda on / on () nie działa jako live () - jquery, jquery-1.7

Metoda on () nie działa jako live () - jquery, jquery-1.7

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 documentmoż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)