jQuery .on() zamiast .live() i .delegate()

Dodany: 11 stycznia, 2013 | Kategoria: JavaScript

Musiał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ć:

//wersja z live - deprecated
$('.class a').live(function(){ /* xxx */ });

//poprawnie
$(document).on('click', '.class a', function(){ /* xxx */ });

I teraz dodane dynamicznie elementy będą event click wykonywać.

Tagi: , , , , , 1 Komentarz »