Qué es y cómo usar el Método on() de jQuery – Tutorial

Desde la versión 1.7 de jQuery tenemos el método on(), que nos ofrece toda la funcionalidad necesaria para gestionar eventos. Gracias a este método ya no necesitamos los antiguos bind(), live() o delegate(), pero tampoco blur(), focus(), click(), hover() y otros.

Al igual que existe on(), tenemos su contrario, off(), que elimina los eventos asignados con on().

Pero lo mejor es que veamos ejemplos.

Supongamos que queremos hacer algo cuando se haga click sobre un botón:

Es como lo haríamos tradicionalmente con click(). Pero si miramos el código de jQuery veremos que en realidad lo que sucede es que se está llamando al método on(), por lo que lo más rápido es hacer:

Esta es la ruta más directa. Y lo mismo para otros métodos como change(), hover(), mouseenter(), etc.. (en realidad hover() lo que hace es llamar a “mouseenter()” y a “mouseleave()” que a su vez llaman al método “on()” )

Veamos jQuery. Si descargamos la versión 1.7 o superior y buscamos en su código, veremos lo siguiente:

De aquí sólo nos interesa ver que los métodos “blur, focus, focusin, focusout, load, resize, scroll, unload, click, dblclick, mousedown, mouseup, mousemove, mouseover, mouseout, mouseenter, mouseleave, change, select, submit, keydown, keypress, keyup, error y contextmenu” al final terminan todos en “this.on( name, null, data, fn )“.

bind(), live() y delegate()

Antiguamente también se hacía:

O si queríamos que el evento funcionara incluso después de añadir nuevos elementos “button” al documento entonces usábamos el método live():

Con posterioridad, jQuery introdujo “delegate()“, que nos permitía asignar un evento a un contexto. Por ejemplo, si el botón está (o va a estar, si se añade con posterioridad) dentro de un div con la clase “contenedor”:

Pero igual que con los anteriores, tanto bind(), como live() o delegate() lo único que hacen es llamar al método on().

Veámoslo una vez más en el código de jQuery:

Es decir, podemos seguir usándolos, pero no tiene mucho sentido si sabemos que jQuery en realidad está llamando el método on().

Podemos terminar viendo un ejemplo que nos ofrece la propia página de jQuery sobre cómo usar el método on() con un evento delegado (como el que vimos antes con “delegate()“). Supongamos que tenemos una tabla con 1.000 filas en su tbody. Con este código asignamos el evento a los 1.000 elementos, con la carga de trabajo que supone:

En cambio, con el evento delegado podemos asignar el gestor del evento sólo a un elemento, en este caso el “tbody”, y el evento sólo necesitará subir un nivel (desde el tr sobre el que se ha hecho click hasta tbody):

3 comentarios en “Qué es y cómo usar el Método on() de jQuery – Tutorial

  1. Excelente aporte!

    Solo un detalle.

    Si observas el código fuente de jQuery 1.7.2+, la función live(). apunta a la función nueva on().

    Por lo que la forma correcta de utilizar on(). (y por supuesto off().) según jQuery es asi:

    Comento esto por que si intentas utilizar la función on(). como la propones aqui, funcionará con los elementos existentes en el DOM. Pero al momento de agregar elementos al documento dinámicamente, ya sea por eventos o AJAX, no funcionará.

    Saludos!

Deja un comentario

Tu dirección de correo electrónico no será publicada. Los campos necesarios están marcados *

Puedes usar las siguientes etiquetas y atributos HTML: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code class="" title="" data-url=""> <del datetime=""> <em> <i> <q cite=""> <strike> <strong> <pre class="" title="" data-url=""> <span class="" title="" data-url="">