2012-08-26 18 views
6

Właśnie zauważyłem, że live() jest już przestarzałe w jQuery. Mam szybkie pytanie (aby upewnić się, która metoda jest najbardziej wydajna, najszybsza i aktualna). Mam myfunction() i chcę bind() go do wszystkich obecnych i przyszłych elementów z attr("title") == 'x'.Jak dodać wydarzenie jQuery do wszystkich obecnych i przyszłych elementów?

Czy to, co powinno się używać:

jQuery("???").bind("mouseup", myfunction); 
jQuery("???").bind("keyup", myfunction); 

albo to:

jQuery("???").delegate("???", "mouseup", myfunction); 
jQuery("???").delegate("???", "keyup", myfunction); 

albo to:

jQuery("???").on("mouseup", "???", myfunction); 
jQuery("???").on("keyup", "???", myfunction); 

Jestem również mające problem z podaniem prawidłowego wyboru (y) - ponieważ niektóre z nich pozwalają przypisać zdarzenie do jednej rzeczy (np. ciało lub dokument) i pozwalają na drugi selektor.

Odpowiedz

9

Zastosowanie .on() zamiast z attribute equals selector:

$(document).on('mouseup', '[title="x"]', myfunction); 
+0

Dzięki! Tego właśnie szukam :) Myślę, że na to pytanie już udzielono odpowiedzi. – Atadj

+0

@Paul: Również jeśli masz wspólny nadrzędny element, który pasuje do selektora '[title =" x "]', zamień '$ (document)' na '$ (" # id_of_common_parent ")' as will will be bardziej wydajny. –

+0

Dzięki! Ostatnią rzeczą - co jeśli chcę użyć "contentEditable" zamiast "Title" i "contentEditable" może być: (1) 'contentEditable =" contentEditable "', (2) 'contentEditable =" true "' lub just 'contentEditable '. Są to 3 atrybuty, które oznaczają "true" - w przypadku 'title =" x "' istnieje tylko jedna możliwość. To drugi przypadek, którego potrzebuję. – Atadj

6

Składnia który zastępuje .live() jest tak:

$('#parent').on('keyup mouseup', '.children', myfunction); 
+0

Dobrze wiedzieć, że można mieszać ze sobą dwa wydarzenia za pomocą tego. Dzięki! Zastanawiam się także, jaki byłby mój selektor - i dlaczego napisali, że 'live()' nie jest efektywny? Czy to samo z 'on()'? – Atadj

+0

Istnieje lista problemów z '.live()' na stronie API dla tej metody: http://api.jquery.com/live/ – Blender

Powiązane problemy