2011-02-11 8 views
1

本当にストリップダウンバージョン:Selectorに複数の要素を追加した.load()を1回だけ行う方法は?

シナリオ私はアニメーション化し、それがload()がtriggerdがelement_Aelement_Bのために2倍になると思われる​​ を使用して外部のページをロードしています2つのセレクタ... は、それを持ってする方法はあります一度トリガー?

$('.element_A, .element_B').click(function(){ 

    //... 

    $(".element_C").load("someFile", etc); 

    //... 

}); 

答えて

0

パトリックDWは、ソリューションの基盤を構築しました。負荷が1回だけトリガされるためには、何らかの種類のインジケータを追加する必要がありました。

$temp_LoadCounter = 0; // added 

$('.element_A, .element_B').click(function(){ 

    //... 

    $temp_LoadCounter += 1; // added 

    if ($temp_LoadCounter == 1) { // added 

     $(".element_C").load("someFile", etc); 

    //... 

    } // added 

}); 
1

​​がすでに実行されているかどうかを示すフラグを使用します。必要に応じて

var triggered = false; // our flag 

$('.element_A, .element_B').click(function(){ 
     // if it hasn't run yet, run it and set "triggered" to "true" 
    if(!triggered) { 
     $(".element_C").load("someFile", etc); 
     triggered = true; 
    } 
}); 

あなたはloadのためのコールバックで戻っfalseにそれを設定することができます。

2回発射した理由は、セレクタ内の要素の1つが他の要素の内部にネストされている場合は、イベントがバブリングしているためです。

return false;またはevent.stopPropagation()(docs)メソッドでバブリングを防ぐことができます。

$('.element_A, .element_B').click(function(event){ 
     // prevent the event from bubbling and triggering the handler again 
    event.stopPropagation(); 

    $(".element_C").load("someFile", etc); 

}); 
+0

hi patrick dw。 あなたは間違いなく、ソリューションの鍵だった正しい方向に私を指摘しました! 方法1が問題を解決する鍵となりました。唯一の問題は、トリガーがAjaxロード後にtrueに戻った後は、2回目の実行で使用できるように十分速く使用できることでした。それが関連するコードの最後の行の最後に置かれていても。私は美しく動作するカウンターを使用して終了しました。 このスレッドに返信として追加します。 コンテンツが読み込まれたコンテナがelement_B内に配置されていても、方法2は効果がありません。 – PixelGrinch

関連する問題