jQuery live с событием ready или load

я использую плагин всплывающей подсказки jQuery Tools, который инициализируется с помощью $('selector').tooltip(). Я хотел бы назвать это любым текущим или будущим .tooltipper элемент. Я решил, что сработает следующее:

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

но это не удалось- - - готовое событие не сработало. То же самое для нагрузки. Я читал, что livequery может дать результат, который я ищу, но, конечно, есть способ использовать jQuery .live() чтобы снять его, учитывая, что документация говорит, что он работает для всех jQuery события, в которые я верю ready - один.

3 ответов


цитата из JQ API (http://api.jquery.com/live/):

в jQuery 1.3.x могут быть связаны только следующие события JavaScript (в дополнение к пользовательским событиям).live (): click, dblclick, keydown, keypress, keyup, mousedown, mousemove, mouseout, mouseover и mouseup.

по состоянию на jQuery 1.4 .метод live () поддерживает пользовательские события, а также все события JavaScript.

С jQuery 1.4.1 четный фокус и размытие работа с live (отображение на более подходящие, пузырящиеся, события focusin и focusout).

начиная с jQuery 1.4.1 можно указать событие наведения (сопоставление с "mouseenter mouseleave").

.live() не поддерживает событие ready.


чтобы добавить к отличному ответу HurnsMobile; глядя на bindReady(), который является внутренним вызовом, который jQuery делает для привязки к событию загрузки документа каждый раз, когда вы вызываете $(some_function) или $(document).ready(some_function) мы видим, почему мы не можем привязать к "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();
            }
        }
    }

в итоге $(some_function) вызывает функцию, которая связывает:

  • DOMContentLoaded
  • onreadystatechange (DOMContentLoaded)

HurnsMobile прав. JQuery live не поддерживает готовое событие.

вот почему я создал плагин, который сочетает в себе два. Вы регистрируете обратный вызов один раз, а затем вам нужно будет вызвать плагин один раз для контента, который вы добавляете вручную.

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

затем при создании нового контента:

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

или

$('<div class="tooltipper">...').appendTo($('body')).liveReady();

демо доступно здесь: http://cdn.bitbucket.org/larscorneliussen/jquery.liveready/downloads/demo.html

Проверьте вводный пост здесь: http://startbigthinksmall.wordpress.com/2011/04/20/announcing-jquery-live-ready-1-0-release/


Также посмотрите на http://docs.jquery.com/Plugins/livequery, который прослушивает изменения на dom.