8

で初期化されるjQueryToolsツールチッププラグインを使用しています$('selector').tooltip().tooltipperこれを現在または将来の要素と呼びたいと思います。私は次のことがうまくいくと思いました:

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

しかし、それは失敗しました---準備ができたイベントは発火しませんでした。負荷についても同じです。livequeryは私が探している結果を生成できることを読みましたが.live()、ドキュメントにはすべてのjQueryイベントで機能すると記載されていることを考えると、jQueryを使用してそれを実行する方法は確かにありreadyます。

4

3 に答える 3

12

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の時点では、フォーカスとブラーもライブで機能します(より適切なバブリング、イベントのフォーカスインとフォーカスアウトへのマッピング)。

jQuery 1.4.1以降、ホバーイベントを指定できます(「mouseentermouseleave」へのマッピング)。

.live()レディイベントをサポートしていないようです。

于 2010-07-07T15:50:43.340 に答える
5

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

最善の策は、readyイベント(1回だけ発生する)をリッスンしようとするのではなく、新しい要素を作成する可能性のあるアクションにバインドすることです。.tooltipper

于 2010-07-07T16:01:51.830 に答える
1

HurnsMobileは正しいです。JQueryliveはready-eventをサポートしていません。

これが、2つを組み合わせたプラグインを作成した理由です。コールバックを1回登録してから、手動で追加したコンテンツに対してプラグインを1回呼び出す必要があります。

$.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/


また、DOMの変更をリッスンするhttp://docs.jquery.com/Plugins/livequeryも参照してください。

于 2011-04-20T07:03:41.303 に答える