2011-12-06 3 views
0

最後の2時間私の髪を引き抜いた後、まだ私は紛争を見つけることができませんでした。この問題のトラブルシューティングを手伝ってください。私はhttp://www.dynamicdrive.com/dynamicindex17/ajaxtabscontent/ajaxtabs_suppliment3.htmを使用して私のサイトのためのajaxタブを作成しており、またモーダルウィンドウにはhttp://defunkt.io/facebox/を使用しています。しかし、私がfaceboxリンクをAjaxタブを通してロードしようとしているときに、その内容がfaceboxにロードされていない。しかし、Ajaxタブの外にあるリンクについてはうまく動作します。何か案が?jQueryのfaceboxはDD Ajaxtabsで動作しません。

答えて

2

これは、DOMにロードする新しいコンテンツには、以前に設定されたイベントハンドラがアタッチされていないためです。

この場合、新しいコンテンツがajaxタブに読み込まれる前にfaceboxプラグインが初期化されています。したがって、本質的にfaceboxプラグインはこれらの新しいリンクが存在することを知らない。

答えは、新しいコンテンツが読み込まれた後にプラグインを再初期化することです。

だから、呼び出す必要があります: - 新しいAjaxのタブの内容は、DOMにロードされた後、

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

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

また

(とはるかに簡単に)あなたがあなたのサイトにlivequeryスクリプトが含まれていると(このコードを使用してjQueryのlivequery plugin

を使用してプラグインfaceboxを初期化することができます: -

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

$(this).facebox(); 

}); 

Livequeryますその後、自動的にそれらがDOMに追加されたときに新たにロードされたfaceboxのリンクを検出し、あなたのためにそれらにfaceboxプラグインを適用する

EDIT:。

これはまだ効果がありません(実際に私が使用していたときにはライブクエリとしてなぜ夢ではないのか分かりませんが)マウスを下ろすたびにfaceboxをアンバインドして再バインドしてください。新しいか古いかを示すANY faceboxリンク。

$('a[rel*=facebox]').live("mousedown", function() { 
    $(this).unbind('click'); //everytime you click unbind the past event handled. 
    $(this).facebox(); 
}); 
+0

ライブクエリソリューションが時々動作しています。時々それは失敗する。私は最初の解決策をどこに追加すればよいか分かりますか? – user632347

+0

私はちょっとハックしていますが、あなたのためにこのトリックを行うべきである第3の解決策で私のanwserを更新しました。 – gordyr

関連する問題