2011-02-11 27 views
1

一个非常精简的版本:添加了多个元素如何.load()只有一次?

情景两个选择,我的动画,然后加载使用​​ 看来load()是triggerd两次element_Aelement_B外部网页... 有没有办法只能把它触发一次?

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

    //... 

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

    //... 

}); 

回答

0

帕特里克DW建为解决方案的基础。需要添加某种指标才能触发一次负载。

$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

或者,如果它为什么被解雇两次的原因是,在选择的要素之一是嵌套在另一个里面,那是因为该事件被冒泡。

可以防止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

喜帕特里克DW。 你明确指出我到正确的方向这是关键的解决方案! 方法之一是帮助解决问题的关键。唯一的问题是,一旦触发了AJAX负荷后重新设置为true,它是可利用足够快它可用于第二轮的。即使它放在相关代码最后一行的最后。最后我用它精美的作品的计数器。 我将其添加为回答这个线程。 方法2没有,即使内容装入容器内element_B nexted任何影响。 – PixelGrinch

相关问题