2010-12-14 15 views
12

Wygenerowałem kilka linków html z jQuery i dodałem je do jakiegoś div ale to szwy, że nie mogę teraz wywołać metody click, kiedy te elementy są dołączone (działało dobrze, gdy zostały one zakodowane na stałe html) $('#something a').click(function() ...jQuery kliknij na dołączonych elementach

Czy ktoś zna rozwiązanie tego problemu?

Odpowiedz

21

Zastosowanie .delegate() tych przypadkach:

$('#something').delegate('a', 'click', function() { 

To przywiązuje click obsługi na #something, zamiast kierunek do <a> elementów w ... tak to działa na kotwice załączonych później. Alternatywą (gorzej z kilku powodów) wersji jest .live() tak:

$('#something a').live('click', function() { 
+0

@Nick - dlaczego używa żywo gorzej? Po prostu ciekawi, bo bardzo często go używam. – Josh

+0

@Nick - czy mógłbyś skomentować powody, dla których .live() jest gorszy - jestem naprawdę zainteresowany. Twoje zdrowie! –

+4

@Josh, @Jakub - Z '.live()', weźmy powyższy kod - selektor '$ ('# something a')' jest uruchamiany natychmiast, ale nie obchodzi nas, co znalazł ... wynik jest marnowany. Również dlatego, że przywiązuje się do "dokumentu", * każde * "kliknięcie" musi być sprawdzone względem tego selektora. Z '.delegate()' tylko bardzo szybki '$ ('# something')' selektor dostaje serie, a my używamy wyniku. Także kliknięcia z '# czegoś' muszą być sprawdzone, ponieważ są zaznaczone w tym rodzica, więc' .delegate() 'adresuje 2 względy wydajnościowe ... z droższym selektorem, zyski są jeszcze większe. –

0

trzeba użyć funkcji podglądu na żywo, aby upewnić się, że zdarzenie click dostaje zbindowanych do elementów, które zostały dodane do DOM po stronie został załadowany:

$('#something a').live('click',function() ..... 
+0

działa dobrze, dziękuję1 – Dejan

4

Co działa również jest dodanie [kliknij] wydarzenie podczas dołączania elementów, tak jak poniżej:

$('<someElement>').click(function(){ 
    $('<someElement>').append('<htmlCodeToAppend>'); 
    $('<appendedElement>').click(function() { /* do something */ }); 
}); 

podejście to spełnia swoje zadanie, ale nie jestem pewien f są jakieś zastrzeżenia do tego, może jeden z profesjonalistów może łaskawie wkroczyć tutaj.

Cheers, Erik

Powiązane problemy