2011-12-09 6 views
5

Supponendo voglio solo collegare un semplice gestore di clic a un elemento, ho sempre fatto questo:Dovrei usare .on() o .click() per collegare un gestore di eventi?

$("#mydiv").click(function() { ... }); 

Guardando la documentazione JQuery, sembra che .on() è il modo "raccomandato" per allegare i gestori di eventi e sostituisce .bind(), .delegate() e .live():

al jQuery 1.7, il metodo .on() fornisce tutta la funzionalità necessaria per il fissaggio gestori di eventi. Per assistenza nella conversione da vecchi metodi jQuery , vedere .bind(), .delegate() e .live().

E nella documentazione per .click() si dice:

Questo metodo è una scorciatoia per .bind ('click', handler) nei primi due varianti, e .trigger ('click ') nel terzo.

Quindi questo implica che .click() sta usando .bind() che sarà deprecato e sostituito da .on(), giusto? O è l'implicazione che .click() rimarrà in giro, ma a un certo punto diventerà una scorciatoia per .on("click")?

In sostanza, la mia domanda è questa ... Quando si scrive codice jQuery oggi, dovrei usare:

Variant 1: $("#mydiv").click(function() { ... }); 

o:

Variant 2: $("#mydiv").on("click", function() { ... }); 

?

+0

Non devi preoccuparti del codice precedente, è altamente improbabile che rimuoveranno completamente la stenografia del clic. Il gestore .on() è solo un modo più efficiente di collegare i gestori di eventi, dall'essere in grado di collegare più gestori di eventi contemporaneamente, all'aggiunta di informazioni aggiuntive a un evento mappato! – Khez

risposta

4

Personalmente userei on() per tutti i binding di eventi da jQuery 1.7+.

Significa che non c'è alcuna ambiguità tra gli elementi che vengono aggiunti dinamicamente e quelli disponibili al caricamento della pagina.

Inoltre, come affermi, click() (e altre scorciatoie eventi) vengono convertiti in on("event", function() { ... }); da jQuery in ogni caso, in modo da risparmiare un passo nel processo - non che questo fa una differenza notevole, naturalmente.

E infine, on("click") legge meglio a mio parere.

+0

I documenti dichiarano che .click() viene convertito in .bind(), non in .on(). Ecco perché sono confuso. – njr101

+2

In 1.7+ 'click()' viene convertito in 'on()'. Immagino che non abbiano ancora aggiornato i documenti. –

+0

Grazie per la risposta chiara Rory. Ho controllato l'origine di JQuery 1.7 per confermare - non che non mi fidi di te;) La chiamata .click() viene infatti convertita in .bind() come dicono i documenti. Ma. Bind() è a sua volta convertito in .on(). Quindi sì, hai assolutamente ragione. – njr101

Problemi correlati