Widzę, że .on()
w jQuery 1.7 jest nowa metoda, która zastępuje .live()
we wcześniejszych wersjach.
Interesuje mnie różnica między nimi i korzyści płynące z zastosowania tej nowej metody.
jquery
jquery-1.7
ajbeaven
źródło
źródło
live()
zostały zmodyfikowane tak, aby zachowywały się jakon()
, mogłoby to spowodować uszkodzenie istniejącego kodu. Ludzie z jQuery pokazali, że niekoniecznie boją się „złamania” starego kodu, ale przypuszczam, że w tym przypadku zdecydowali, że nie ma sensu ryzykować wprowadzania regresji.live()
został wycofany w wersji 1.7 i usunięty w wersji 1.9. api.jquery.com/liveJedyną różnicą, na którą natkną się ludzie podczas przechodzenia z
.live()
do,.on()
jest to, że parametry.on()
są nieco inne podczas wiązania zdarzeń z elementami dodanymi dynamicznie do DOM.Oto przykład składni, której używaliśmy w
.live()
metodzie:$('button').live('click', doSomething); function doSomething() { // do something }
Teraz, gdy
.live()
jest przestarzała w wersji jQuery 1.7 i usunięta w wersji 1.9, powinieneś użyć.on()
metody. Oto równoważny przykład wykorzystujący.on()
metodę:$(document).on('click', 'button', doSomething); function doSomething() { // do something }
Pamiętaj, że odwołujemy się
.on()
do dokumentu, a nie do samego przycisku . Selektor elementu, którego zdarzeń słuchamy, określamy w drugim parametrze.W powyższym przykładzie wywołuję
.on()
dokument, jednak uzyskasz lepszą wydajność, jeśli użyjesz elementu bliżej twojego selektora. Każdy element nadrzędny będzie działał, o ile istnieje na stronie przed wywołaniem.on()
.Jest to wyjaśnione w dokumentacji, ale dość łatwo jest przeoczyć.
źródło
Zobacz oficjalny blog
źródło
.live()
Ta metoda służy do dołączania programu obsługi zdarzeń dla wszystkich elementów, które pasują do bieżącego selektora, teraz i w przyszłości.
$( "#someid" ).live( "click", function() { console.log("live event."); });
i
.on()
Ta metoda służy do dołączania funkcji obsługi zdarzeń dla jednego lub większej liczby zdarzeń do wybranych elementów poniżej jest przykładem.
$( "#someid" ).on( "click", function() { console.log("on event."); });
źródło
Dobry samouczek na temat różnicy między na żywo a na żywo
Cytat z powyższego linku
źródło
aby uzyskać więcej informacji, sprawdź to .. .live () i .on ()
Metoda .live () jest używana, gdy zajmujesz się dynamicznym generowaniem treści ... tak jak stworzyłem w programie, który dodaje kartę, gdy zmieniam wartość suwaka Jquery i chcę dołączyć funkcję przycisku zamykania do każdej karty który wygeneruje ... kod, który próbowałem, to ...
var tabs = $('#tabs').tabs(); // live() methos attaches an event handler for all //elements which matches the curren selector $( "#tabs span.ui-icon-close" ).live( "click", function() { // fetches the panelId attribute aria-control which is like tab1 or vice versa var panelId = $( this ).closest( "li" ).remove().attr( "aria-controls" ); $( "#" + panelId ).remove(); tabs.tabs( "refresh" ); });
i działa całkiem fajnie ...
źródło
Jestem autorem rozszerzenia Chrome „Comment Save”, które używa jQuery, i takiego, które używało
.live()
. Sposób działania rozszerzenia polega na dołączeniu słuchacza do wszystkich obszarów tekstu za pomocą.live()
- działało to dobrze, ponieważ za każdym razem, gdy dokument się zmieniał, nadal dołączał słuchacza do wszystkich nowych obszarów tekstu.Przeprowadziłam się do,
.on()
ale to też nie działa. Nie dołącza nasłuchiwania za każdym razem, gdy dokument się zmienia - więc wróciłem do używania.live()
. To chyba błąd.on()
. Chyba tylko uważaj.źródło
.live()
metoda. Ekwiwalent.on()
za$('p').live('click', function () { alert('clicked'); });
to$(document).on('click', 'p', function () { alert('clicked'); });
. Zauważ, że używasz.on()
metody w,document
a następnie określasz element, do którego chcesz dołączyć procedurę obsługi zdarzeń do nasłuchiwania, w drugim parametrze.Mam wymóg identyfikacji zdarzenia zamknięcia przeglądarki. Po przeprowadzeniu badań wykonuję następujące czynności przy użyciu jQuery 1.8.3
Włącz flagę za pomocą następującego jQuery po kliknięciu hiperłącza
$ ('a'). live ('click', function () {cleanSession = false;});
Włącz flagę za pomocą następującego jQuery, gdy zostanie kliknięty przycisk wprowadzania typu przesyłania
$ ("input [type = submit]"). live ('click', function () {alert ('input button clicked'); cleanSession = false;});
$ ('form'). live ('submit', function () {cleanSession = false;});
Teraz ważna rzecz ... moje rozwiązanie działa tylko wtedy, gdy zamiast tego użyję .live .on. Jeśli użyję .on, zdarzenie zostanie uruchomione po przesłaniu formularza i jest za późno. Wiele razy moje formularze są przesyłane za pomocą wywołania javascript (document.form.submit)
Jest więc kluczowa różnica między .live i .on. Jeśli używasz .live, Twoje zdarzenia są uruchamiane natychmiast, ale jeśli przełączysz się na .on, nie będą uruchamiane na czas
źródło
.on
nieprawidłowo lub coś innego w kodzie jest przyczyną tego. Być może wklej kod dla swojej.on
metody.