0

最後の2時間髪を抜いた後でも、競合を見つけることができませんでした. この問題のトラブルシューティングを手伝ってください。http://www.dynamicdrive.com/dynamicindex17/ajaxtabscontent/ajaxtabs_suppliment3.htmを使用してサイトの ajax タブを作成し、モーダル ウィンドウにhttp://defunkt.io/facebox/も使用しています。しかし、ajaxタブからロードされたフェイスボックスリンクを試していると、コンテンツがフェイスボックスにロードされません。ただし、ajax タブの外側のリンクでは正常に機能します。何か案が?

4

1 に答える 1

2

これは単に、DOM にロードする新しいコンテンツには、以前に設定されたイベント ハンドラーが関連付けられていないためです。

したがって、この場合、新しいコンテンツが ajax タブにロードされる前に、facebox プラグインが初期化されます。したがって、基本的に、facebox プラグインはこれらの新しいリンクが存在することを知りません。

答えは、新しいコンテンツがロードされた後にプラグインを再初期化することです。

だからあなたは電話する必要があります: -

  $('a[rel*=facebox]').facebox()

...再び、新しい ajax タブのコンテンツが DOM に読み込まれたら。ajax タブ スクリプトを簡単に見てみると、新しいコンテンツが ajax タブに読み込まれるたびに呼び出される関数にその行を追加することで、(上記のように) facebox プラグインを単純に再初期化することで、これを簡単に解決できると思います。

あるいは (そしてもっと簡単に)、jQuery livequery プラグインを使用して facebox プラグインを初期化することもできます

このコードを使用して (サイトに livequery スクリプトを含めたら:-

$('a[rel*=facebox]').livequery(function() {

$(this).facebox();

});

Livequery は、DOM に追加されると、新しく読み込まれた facebox リンクを自動的に検出し、facebox プラグインをそれらに適用します。

編集:

これでも目的の効果が得られない場合 (以前は夢だったライブ クエリではない理由はわかりませんが)、この汚い小さなハックを試して、マウスを押すたびに facebox のバインドを解除して再バインドしてください。新旧のフェイスボックスリンク。

$('a[rel*=facebox]').live("mousedown", function() { 
    $(this).unbind('click'); //everytime you click unbind the past event handled.
    $(this).facebox();
});
于 2011-12-07T00:14:17.963 に答える