jQuery .on() zamiast .live() i .delegate()
Dodany: 11 stycznia, 2013 | Kategoria: JavaScriptMusiałem poprawić pewien skrypt, a ponieważ część elementów była tworzona dynamicznie i wtedy musiałem do nich podpiąć event, najprościej było użyć .live() z jQuery – niestety od wersji 1.7+ .live() ma status deprecated. Tak samo jak .delegate(), które działało podobnie. Zaleca się używanie .on(), które działa podobnie do .bind().
Niestety i tutaj miałem problemy… użycie .on() na konkretnych elementach przypinało event tylko jeśli istniały one w momencie wykonania, a już nie dodawało i nie obserwowało powstawania nowych takich elementów. Po chwili googlania po sieci, znalazłem rozwiązanie – element dla którego trzeba wykonać .on(), to document, natomiast jako drugi parametr podaje się którego elementu .on() ma dotyczyć:
$('.class a').live(function(){ /* xxx */ });
//poprawnie
$(document).on('click', '.class a', function(){ /* xxx */ });
I teraz dodane dynamicznie elementy będą event click wykonywać.
Tagi: bind, delegate, deprecated, jquery, live, on 1 Komentarz »