jQuery, живой с готовым событием или событием загрузки

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

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

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

8
задан Steven 7 July 2010 в 15:41
поделиться

2 ответа

Цитата из 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 можно указать событие hover (отображение на "mouseenter mouseleave").

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

12
ответ дан 5 December 2019 в 09:23
поделиться

Чтобы добавить к отличному ответу 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)
  • window.load / onload

Лучше всего привязать к тем действиям, которые могут создать новые элементы .tooltipper , а не пытаться прослушивать событие готовности (которое происходит только один раз).

5
ответ дан 5 December 2019 в 09:23
поделиться
Другие вопросы по тегам:

Похожие вопросы: