Contenido

live() en jQuery 1.3

18 feb

+ 10

jQuery añadió, con la versión 1.3 de jQuery, un método para gestionar los eventos llamado live(). Dicho evento nos permite controlar los eventos de los elementos existentes y de los que están por crear.

Hasta ahora con jQuery teníamos que volver a añadir los eventos al crear nuevos elementos en nuestros scripts.

jQuery('<a href="...">Ejemplo</a>');
jQuery('a').bind('click', function(){ ... });

Con live() esto es mucho más sencillo. Ya que únicamente se tendrá que lanzar una vez y al generar nuevos eventos que cumplan la condición del selector que indiquemos contendrán los eventos y funcionalidades especificadas para estos elementos.

jQuery('a').live('click', function(){ ... });
...
jQuery('body').append('<a href="...">Ejemplo</a>');

En este caso, el <a /> que generamos despues de live() poseerá la funcionalidad descrita anteriormente mediante live().

Por desgracia, tenemos una limitación y es que no todos los eventos están soportados por la función y tendremos que conocer los que no son posible extender.

Soportados

  • click
  • dblclick
  • mousedown
  • mouseup
  • mousemove
  • mouseover
  • mouseout
  • keydown
  • keypress
  • keyup

No soportados

  • blur
  • focus
  • mouseenter
  • mouseleave
  • change
  • submit

die() es el opuesto y se encarga de cortar la propagación de los eventos a nuevos elementos.

jQuery('a').live('click', function(){ ... });
...
jQuery('a').die('click', function(){ ... });
...
jQuery('body').append('<a href="...">Ejemplo</a>');
  • Buenísimo, ya estaba hasta los pinreles de tener que gestionar eso a mano. Una pena que con el blur no funcione…

  • van muy bien, yo ya los estoy utilizando desde que salio la versión 1.3 y van fantásticos.
    El único problema es que no soporta todos los métodos, por ejemplo css, pero algo es algo y se agradece.

    Saludos

  • Andrés, tengo una pregunta. Nunca he usado jQuery, simplemente programo en JS… simplemente. ¿Qué diferencia hay en programar con jQuery a programar si él?

  • @Quitz: Desde mi punto de vista, tenemos 2 diferencias, una sería 1 pro y la otra 1 contra.

    Pro: Velocidad.
    Si lo pruebas verás que es muy rápido hacer cualquier funcionalidad. Está todo pensado para que sin tener mucha idea de jQuery puedas hacer que una web tenga dinamismo en tan solo 5 minutos. De verdad.

    Contra: Javascript.
    Pierdes el contacto directo con Javascript. A no ser que te obligues a hacer tus cosas despues a parte. Es muy rápido, y cómodo y por ese motivo te olvidas de que crear elementos es document.createElement() y no con html()… (por ejemplo).

    Para según que proyectos es una herramienta realmente interesante :D

  • Gracias.
    Creo que lo probaré, ya miraré por ahí como se usa :)

  • Lo que son las coincidencias, justo hoy estaba volviendome loco con una asignacion recursiva y gracias al cielo para mi sorpresa vine a dar con esta nueva caracteristica de jquery 1.3. Lo twittie y me sorprendo de que vos hayas hecho una mención. Lo que son las coincidencias…..

  • El talibán ortográfico que hay en mí me ha obligado a decirte que “Supported” y “Unsupported” se traducen al castellano como “Admitido” y “No admitido”. Lo lamento, me ha forzado él, yo no he tenido nada que ver… :-P

  • Bueno, antes de integrarlo en la biblioteca, existia un plugin llamado liveQuery que hacía lo mismo. Incluso creo que soportaba más eventes. Llegué a utilizarlo, aunque al final lo dejé estar y acabé controlando lo de los eventos “en vivo” a mano porque o bien me daba problemas o bien no sabía utilizar el plugin correctamente en determinadas ocasiones.

    Ahora he utilizado el nuevo método y la verdad es que me ha ido de perlas. Supongo que añadirán más adelante nuevos eventos, en el caso que se pueda. Tampoco funciona con el hover, aunque bueno, no es un evento, sino más bien un “helper” que equivale a onmousover y onmouseout…

Comentar

#

Me reservo el derecho de eliminar y/o modificar los comentarios que contengan lenguaje inapropiado, spam u otras conductas no apropiadas en una comunidad civilizada. Si tu comentario no aparece, puede ser que akismet lo haya capturado, cada día lo reviso y lo coloco en su lugar. Siento las molestias.