2011-12-09 12 views
5

Suponiendo sólo quiero adjuntar un simple controlador de clic a un elemento, lo he hecho siempre esto:¿Debo utilizar .on() o .click() para adjuntar un controlador de eventos?

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

En cuanto a los documentos de jQuery, parece que .on() es el camino "recomendado" a asociar controladores de eventos y sustituye .bind(), .delegate() y .live():

Como de jQuery 1.7, el método .on() proporciona toda la funcionalidad requerida para la fijación de controladores de eventos. Para obtener ayuda sobre la conversión desde métodos de evento jQuery más antiguos, consulte .bind(), .delegate() y .live().

Y en los documentos de .click() que dice:

Este método es un método abreviado para .bind ('clic', handler) en las dos primeras variaciones, y .trigger ("clic ') en el tercero.

Así que esto implica que .click() está utilizando .bind() que será obsoleto y reemplazado por .on(), ¿verdad? ¿O es la implicación de que .click() se mantendrá, pero en algún momento se convertirá en un atajo para .on("click")?

Básicamente, mi pregunta es la siguiente ... Al escribir código jQuery hoy, debería usar:

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

o:

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

?

+0

No tiene que preocuparse por el código heredado, es muy poco probable que eliminen completamente la abreviatura de clic. El controlador .on() es solo una forma más eficiente de vincular manejadores de eventos, de poder unir múltiples manejadores de eventos al mismo tiempo, ¡y agregar información adicional a un evento mapeado! – Khez

Respuesta

4

Personalmente, utilizaría on() para todas las vinculaciones de eventos de jQuery 1.7+.

Significa que no hay ambigüedad entre los elementos que se agregan dinámicamente y los disponibles en la carga de la página.

También, como usted afirma, click() (y otros accesos directos de eventos) se convierten en on("event", function() { ... }); por jQuery todos modos, por lo que ahorra un paso en el proceso - no es que esto hace una diferencia notable, por supuesto.

Y finalmente, on("click") tiene una mejor lectura en mi opinión.

+0

Los documentos indican que .click() se convierte en .bind(), no en .on(). Es por eso que estoy confundido. – njr101

+2

En 1.7+ 'clic()' se convierte en 'on()'. Supongo que aún no han actualizado los documentos. –

+0

Gracias por la respuesta clara Rory. Miré a través de la fuente JQuery 1.7 para confirmar, no es que no confíe en ti;) La llamada .click() se convierte de hecho en .bind() como dicen los documentos. Pero .bind() se convierte a su vez en .on(). Entonces sí, tienes toda la razón. – njr101

Cuestiones relacionadas