link evento disparar jquery onclick click bind mouseclick-event

jquery - evento - ¿Cuáles son las diferencias significativas entre $(sel).bind("clic", $(sel).click(, $(sel).live("clic", $(sel).on("clic"?



on click jquery class (2)

Los he estado utilizando durante bastante tiempo, pero la mayoría de las veces prefiero el más corto, sin embargo, solo quiero profundizar en los detalles. Puede que haya estado creando códigos erróneos y no quiero contribuir y difundir códigos hechos vagamente en la web.

Así que dime:

¿Cuáles son las ventajas / desventajas significativas entre ellos, o es simplemente como el helado, diferentes sabores pero el mismo efecto de "sentirse bien"?

Todos son alentados a expresar sus opiniones expertas con respecto a este asunto.

Muchas gracias de antemano.


No hay diferencia en la funcionalidad en ese caso particular. Sin embargo, se prefiere .bind a .bind partir de jQuery 1.7, y en cuanto a .click , es solo una abreviatura de un controlador de eventos común.


bind() se agregó en 1.0, live() en 1.3, delegate() en 1.4.2 y on() en 1.7.

A partir de 1.7 on() es el uso preferido y live() está en desuso y no se recomienda en absoluto. Si está utilizando 1.3 use bind() lugar de live() y desde 1.4.2 utilice delegate() lugar de live() y a partir de 1.7 use on() lugar de cualquiera de los demás.

Con respecto a $("selector").click . Tomado de la documentación de click() :

En las dos primeras variaciones, este método es un acceso directo para .bind ("click", handler), así como también para .on ("click", handler) desde jQuery 1.7. En la tercera variación, cuando se llama .click () sin argumentos, es un atajo para .trigger ("clic").

¿Por qué utilizar en () en lugar de los demás?
on() es la última incorporación, uniéndose a la biblioteca jQuery en la versión 1.7. on() tiene varias firmas de métodos que le permiten entregar los mismos resultados que la versión anterior pero mejorados y optimizados. Para citar de la documentación :

A partir de jQuery 1.7, el método .on () proporciona toda la funcionalidad requerida para adjuntar manejadores de eventos.

Bastante ya no es necesario usar bind() o delegate() . Seguro que funcionará y que no debería haber ningún daño al usar esos métodos, pero siempre asumiré que las últimas incorporaciones se optimizan y mejoran con respecto a cualquiera de los inconvenientes de versiones anteriores (a menos que la documentación especifique lo contrario, como en el caso de live() ).
En base a eso, recomendaría usar on() lugar.

La razón por la cual live() no se recomienda como punto-completo tiene más que ver con sus inconvenientes. Para citar de la documentación en live() .

El uso del método .live () ya no se recomienda, ya que las versiones posteriores de jQuery ofrecen mejores métodos que no tienen sus inconvenientes. En particular, surgen los siguientes problemas con el uso de .live ():

  • jQuery intenta recuperar los elementos especificados por el selector antes de llamar al método .live (), que puede llevar mucho tiempo en documentos grandes.
  • Los métodos de encadenamiento no son compatibles. Por ejemplo, $ ("a"). Find (". Offsite, .external"). Live (...); no es válido y no funciona como se esperaba
  • Dado que todos los eventos .live () se adjuntan en el elemento del documento, los eventos toman la ruta más larga y más lenta posible antes de que se manejen.
  • En dispositivos móviles iOS (iPhone, iPad y iPod Touch), el evento click no hace burbujas en el cuerpo del documento para la mayoría de los elementos y no se puede usar con .live () sin aplicar una de las siguientes soluciones:
    1. Utilice elementos nativamente clicables, como un botón o, ya que ambos hacen burbujas para documentar.
    2. Use .on () o .delegate () adjunto a un elemento debajo del nivel de document.body, ya que el iOS móvil burbujea dentro del cuerpo.
    3. Aplique el cursor de estilo CSS: puntero al elemento que necesita clics de burbuja (o un elemento primario que incluye document.documentElement). Sin embargo, tenga en cuenta que esto desactivará copy / paste en el elemento y hará que se resalte al tocarlo.
  • Llamar a event.stopPropagation () en el controlador de eventos no es efectivo para detener los controladores de eventos adjuntos más abajo en el documento; el evento ya se propagó al documento.
  • El método .live () interactúa con otros métodos de eventos de maneras que pueden ser sorprendentes, por ejemplo, $ (document) .unbind ("click") elimina todos los manejadores de clics conectados por cualquier llamada a .live ()!

Aunque hay muchos más extras en la documentación.

Recursos adicionales
hacer clic()
enlazar()
vivir () (no usar)
delegar()
en()