Logo

Blog o JavaScript, jQuery, HTML5, CSS3 i 4. Porady jak pisać dobrej jakości kod, tutoriale, nowości.

jQuery: live() czy delegate()?

Od jQuery w wersji 1.7 metoda live() ma status depracated (przestarzała) i zespół jQuery nie poleca używania jej. Jednak, pytanie o różnice live() i delegate() bardzo często pada na rozmowach kwalifikacyjnych gdy kandydat wpisze w CV, że zna jQuery. Warto znać tą subtelną różnicę.

live()

Służy do podpięcia eventu elementowi (lub elementom), który pasuje do selektora. Dodatkowo live powoduje podpinanie zdarzen nawet dla elementów, które będą tworzone dynamicznie np. na podstawie odpowiedzi z backendu.

Problem jednak z w tym, że wszystkie zdarzenia tworzone przez live() odnoszą się do elementu document, przez co wywoływanie eventów może być bardzo czasochłonne (w zależności od "długości" ścieżki). To jest największa wada live. Do tego dochodzą jeszcze inne np.:

delegate()

Z kolei delegate() pozwala na przypisanie zdarzeń elementom pasującym do selektora, z tą różnicą, że określony jest element główny (tzw. root). Oczywiście zdarzenia będą reagować dla elementów, które zostały stworzone dynamicznie. Przykładowy kod:

$("ul.menu").delegate("a", "click", function() {
   //...
});

Elementem głównym będą wszystkie listy nieuporządkowane posiadające klasę "menu".

Jeżeli ktoś chce mieć niezbity dowód na wyższość delegete nad live niech przeprowadzi i zobaczy wyniki testów na jsPerf.

Odpowiadając na tytułowe pytanie, odpowiedź brzmi: delegate() (od wersji 1.7 on()).

Autor wpisu

Piotr cichosz (shpyo) — Front-end developer Twórca kilku serwisów internetowych oraz autor kilku blogów. Pasjonat nowych, otwartych technologii.

Komentarze

Gavatar MicNeo

31.01.2013 MicNeo

Nice. Nie byłem świadom tej różnicy.

Dodaj komentarz