2012-08-26 5 views
6

Ho appena notato che live() è già deprecato in jQuery. Ho una domanda veloce (solo per accertarmi quale sia il metodo più efficiente, più veloce e aggiornato). Ho myfunction() e voglio bind() per tutti gli elementi attuali e futuri con attr("title") == 'x'.Come aggiungere evento jQuery a tutti gli elementi attuali e futuri?

E 'questo quello che dovrei usare:

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

O questo:

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

O questo:

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

Inoltre sto avendo problemi specificando corretta selettore (s) - perché alcuni di essi consentono di allegare eventi a una cosa (come corpo o documento) e consentono il secondo selettore.

risposta

9

Usa .on() invece, con una attribute equals selector:

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

Grazie! Questo è quello che sto cercando :) Penso che la domanda abbia già una risposta. – Atadj

+0

@Paul: Inoltre, se hai un genitore comune agli elementi che corrispondono al selettore '[title =" x "]', sostituisci '$ (document)' con '$ (" # id_of_common_parent ")' come sarà più efficiente. –

+0

Grazie! Un'ultima cosa: cosa succede se voglio usare "contentEditable" invece di "Title" e "contentEditable" può essere: (1) 'contentEditable =" contentEditable "', (2) 'contentEditable =" true "' or just 'contentEditable '. Questi sono 3 attributi che contrassegnano come 'true' - in caso di' title = "x" 'c'è solo 1 possibilità. Questo è il secondo caso di cui ho bisogno. – Atadj

6

La sintassi che sostituisce .live() è come questo:

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

bene sapere che posso mescolare insieme due eventi che utilizzano questo. Grazie! Mi sto anche chiedendo quale sarebbe stato il mio selezionatore - e perché hanno scritto che 'live()' non è efficiente? È lo stesso con 'on()'? – Atadj

+0

C'è una lista di problemi con '.live()' nella pagina API per quel metodo: http://api.jquery.com/live/ – Blender