En jQuery v1.7 , onse agregó un nuevo método . De la documentación:
'El método .on () adjunta controladores de eventos al conjunto de elementos actualmente seleccionado en el objeto jQuery. A partir de jQuery 1.7, el método .on () proporciona toda la funcionalidad necesaria para adjuntar controladores de eventos '.
¿Cuál es la diferencia con livey bind?

Respuestas:
on()es un intento de fusionar la mayoría de las funciones de enlace de eventos de jQuery en una sola. Esto tiene la ventaja añadida de poner en orden las ineficiencias conlivevsdelegate. En futuras versiones de jQuery, estos métodos serán eliminados y solamenteonyoneserán dejados.Ejemplos:
Internamente, jQuery asigna todos estos métodos y configuradores de controladores de eventos abreviados al
on()método, lo que indica que debe ignorar estos métodos de ahora en adelante y simplemente usaron:Ver https://github.com/jquery/jquery/blob/1.7/src/event.js#L965 .
fuente
$(document.body).delegate("click", ".mySelector", fn);debería ser$(document.body).delegate(".mySelector", "click", fn);onestá en la naturaleza muy cerca dedelegate. Entonces, ¿por qué no usar delegado? Es porqueonno viene solo. hayoff, para desvincular un evento yonecrear un evento que se ejecutará solo una vez. Este es el "paquete" de un nuevo evento.El problema principal
livees que se adhiere a la "ventana", forzando un evento de clic (u otro evento) en un elemento en el interior de la estructura de la página (dom), para "subir" a la parte superior de la página para encontrar un evento controlador dispuesto a lidiar con eso. En cada nivel, todos los controladores de eventos deben verificarse, esto puede sumar rápidamente, si realiza una imbricación profunda (<body><div><div><div><div><table><table><tbody><tr><td><div><div><div><ul><li><button> etc etc etc...)Entonces,
bindcomoclick, como otras carpetas de eventos de acceso directo, se adjuntan directamente al destino del evento. Si tiene una tabla de, digamos, 1000 líneas y 100 columnas, y cada una de las 100'000 celdas incluye una casilla de verificación en la que desea hacer clic. Adjuntar 100.000 controladores de eventos llevará mucho tiempo en la carga de la página. Crear un solo evento a nivel de tabla y usar la delegación de eventos es más eficiente en varios órdenes de magnitud. El objetivo del evento se recuperará en el momento de la ejecución del evento. "this" será la tabla, pero "event.target" será su habitual "this" en unaclickfunción. Ahora lo buenoones que "this" siempre será el destino del evento, y no el contenedor al que está conectado.fuente
con el
.onmétodo es posible hacerlo.live,.delegatey.bindcon la misma función pero con.live()solo.live()es posible (delegar eventos al documento).jQuery("#example").bind( "click", fn )=jQuery( "#example").on( "click", fn );jQuery("#example").delegate( ".examples", "click", fn )=jQuery( "#example" ).on( "click", ".examples", fn )jQuery("#example").live( fn )=jQuery( document ).on( "click", "#example", fn )Puedo confirmar esto directamente desde la fuente jQuery:
jQuery (this.context)?
this.context===documenten la mayoría de los casosfuente
(Mi oración de apertura tenía más sentido antes de que cambiaras la pregunta. Originalmente habías dicho "¿Cuál es la diferencia
live?")ones más parecidodelegatea lo que eslive, es básicamente una forma unificada debindydelegate(de hecho, el equipo dijo que su propósito es "... unificar todas las formas de adjuntar eventos a un documento ..." ).liveestá básicamenteon(odelegate) adjunto al documento en su conjunto. Está en desuso a partir de v1.7 a favor de usaronodelegate. En el futuro, sospecho que veremos el código usandoonúnicamente, en lugar de usarbindodelegate(olive) ...Entonces, en la práctica, puedes:
Usar
oncomobind:Use
onlikedelegate(delegación de evento enraizada en un elemento dado):Use
onlikelive(delegación de evento enraizada en el documento):fuente
ones una combinación debindydelegate, como dije, no me gusta mucholive. Puede usaronlikebind(adjuntar un controlador directamente a un elemento), o puede usaronlikedelegate(adjuntar un controlador a un elemento, pero dispare el evento solo si el elemento real al hacer clic coincide con un selector, y como si ese elemento fuera el que el el evento ocurrió en, por ejemplo, delegación de evento), o puede usarlo comolive(delegateusando el documento como raíz). Es la delegación de eventos lo que lo hace útil si agrega elementos dinámicamente.$("#id", ".class").live(fn)=$(".class").delegate("#id", fn );En realidad, en la antigua fuente jQuery usaban live como el caso general y delegar como un caso especial, lo que hizo que esto fuera aún más confuso cuando lo piensas.delegaterápidamente, pero aún así. :-)live es el acceso directo para .on () ahora
También esta publicación puede ser útil para usted http://blog.jquery.com/2011/11/03/jquery-1-7-released/
fuente
No hay uno para el caso de uso básico. Estas dos líneas son funcionalmente iguales.
.on () también puede hacer delegación de eventos, y es preferible.
.bind () es en realidad solo un alias para .on () ahora. Aquí está la definición de la función de enlace en 1.7.1
La idea para agregar .on () era crear una API de evento unificada, en lugar de tener múltiples funciones para el evento de enlace; .on () reemplaza .bind (), .live () y .delegate ().
fuente
Algo que debe tener en cuenta si desea obtener los controladores de eventos asociados con el elemento: ¡preste atención a qué elemento estaba conectado el controlador!
Por ejemplo, si usa:
obtendrá los controladores de eventos usando:
Pero si usas:
obtendrá los controladores de eventos usando:
(en el último caso, el objeto de evento relevante tendrá selector = ". mySelector")
fuente
eventsestá indocumentado de todos modos y creo que ya no funciona en 1.9