jQuery en vivo con el evento listo o cargado

Estoy usando el complemento de información sobre herramientas de jQuery, que se inicializa con $('selector').tooltip() . Me gustaría llamar a esto en cualquier elemento .tooltipper actual o futuro. Pensé que lo siguiente funcionaría:

 $('.tooltipper').live('ready', function(){ $(this).tooltip() } 

Pero no tuvo éxito, el evento preparado no se disparó. Lo mismo para carga. He leído que livequery puede producir el resultado de lo que estoy buscando, pero seguramente hay una manera de usar jQuery .live() para llevarlo a cabo, teniendo en cuenta que la documentación dice que funciona para todos los eventos de jQuery, de los cuales creer ready es uno

Citado en la API de jQ ( http://api.jquery.com/live/ ):

En jQuery 1.3.x solo los siguientes eventos de JavaScript (además de los eventos personalizados) se pueden vincular con .live (): clic, doble clic, tecla abajo, tecla, tecla, ratón, ratón, ratón, ratón, y ratón.

A partir de jQuery 1.4, el método .live () admite eventos personalizados, así como todos los eventos de JavaScript.

A partir de jQuery 1.4.1, incluso el enfoque y el desenfoque funcionan con el modo en vivo (mapeo a los más apropiados, burbujeantes, eventos enfocados y enfocados).

A partir de jQuery 1.4.1, se puede especificar el evento de desplazamiento (asignación a “mouseenter mouseleave”).

.live() no parece ser compatible con el evento ready.

Para agregar a la excelente respuesta de HurnsMobile; Mirando bindReady() , que es la llamada interna que jQuery realiza para enlazar con el evento de carga de documentos cada vez que llama a $(some_function) o $(document).ready(some_function) , vemos por qué no podemos enlazar con "ready" :

 bindReady: function() { if ( readyBound ) { return; } readyBound = true; // Catch cases where $(document).ready() is called after the // browser event has already occurred. if ( document.readyState === "complete" ) { return jQuery.ready(); } // Mozilla, Opera and webkit nightlies currently support this event if ( document.addEventListener ) { // Use the handy event callback document.addEventListener( "DOMContentLoaded", DOMContentLoaded, false ); // A fallback to window.onload, that will always work window.addEventListener( "load", jQuery.ready, false ); // If IE event model is used } else if ( document.attachEvent ) { // ensure firing before onload, // maybe late but safe also for iframes document.attachEvent("onreadystatechange", DOMContentLoaded); // A fallback to window.onload, that will always work window.attachEvent( "onload", jQuery.ready ); // If IE and not a frame // continually check to see if the document is ready var toplevel = false; try { toplevel = window.frameElement == null; } catch(e) { //and silently drop any errors } // If the document supports the scroll check and we're not in a frame: if ( document.documentElement.doScroll && toplevel ) { doScrollCheck(); } } } 

Para resumir, $(some_function) llama a una función que se enlaza a:

  • DOMContentLoaded
  • onreadystatechange (DOMContentLoaded)
  • window.load / onload

Su mejor apuesta sería vincular aquellas acciones que podrían crear nuevos elementos .tooltipper , en lugar de intentar escuchar el evento listo (que ocurre solo una vez).

HurnsMobile tiene razón. JQuery live no soporta el evento Ready.

Es por esto que creé un plugin que combina los dos. Registra su callback una vez, y luego tendrá que llamar el complemento una vez para el contenido que agregue manualmente.

 $.liveReady('.tooltipper', function(){ this.tooltip() }); 

Luego al crear nuevo contenido:

 element.html(somehtml); element.liveReady(); 

o

 $('
...').appendTo($('body')).liveReady();

Una demostración está disponible aquí: http://cdn.bitbucket.org/larscorneliussen/jquery.liveready/downloads/demo.html

Echa un vistazo a la publicación introductoria aquí: http://startbigthinksmall.wordpress.com/2011/04/20/announcing-jquery-live-ready-1-0-release/


También eche un vistazo a http://docs.jquery.com/Plugins/livequery , que busca los cambios en el dominio.