2012-10-21 56 views
12
var counter = 0; 
jQuery("#div1, #div2").fadeIn('300',function(){ 
{ 
    counter++; 
    console.log(counter); 
} 

上面的代碼將打印「1」和「2」,因爲jQuery fadeIn隱含在兩個不同的DOM對象上。 反正有沒有違反這些規定而只能運行一次?jQuery fadeIn在其回調中運行兩次

+0

你想每個元素有一個計數器嗎?你想做什麼 ? –

+0

@dystroy,我只需要在回調函數中做一些東西 – Alon

回答

4

這是一個快速的解決方案,但不是最好的

var myFlag = true; 
jQuery("#div1, #div2").fadeIn('300',function(){ 
{ 
    if(myFlag == true) 
    { 
     // write the code here 
     myFlag = false; 
    } 
} 

希望這有助於...穆罕默德。

+0

這種解決方案可能是對我最好的一個,因爲我使用jQuery v1.4.2並且無法更新它 – Alon

4

您明確告訴它運行兩次,因爲您已經定義了兩個項目的選擇器。如果你希望它運行一次,要求它在一個項目上運行:

jQuery("#div1") 
+0

感謝flem這是這個問題的正確答案:只是將它們分成兩個句子: jQuery(「#div1」)。fadeIn('300' ); 。 的jQuery( 「#DIV2」)淡入( '300',函數(){{ 櫃檯 ++; 的console.log(櫃);} ) – Anas

17

一個簡單的辦法:

$("#div1").fadeIn(300); 
$("#div2").fadeIn(300,function(){ 
    // do something only once 
}); 

最簡潔的解決方案是使用jQuery's promise system

$.when($("#div1, #div2").fadeIn('300')).done(function(){ 
    // do something only once 
}); 

demonstration

+0

安裝jQueery v1.4.2時不起作用。 – Alon

+0

更新jQuery。我們現在處於1.8版本。 –

+0

如果我可以做更新,我會做到這一點:) – Alon

2

測序代碼的條款:

jQuery("#div1, #div2").fadeIn('300',function(){ 
    counter++; 
    console.log(counteR); 
}); 

相同

jQuery("#div1, #div2").each(function(){ 
    jQuery(this).fadeIn('300',function(){ 
     counter++; 
     console.log(counteR); 
    }); 
}) 

所以你的回調將在jQuery的1.6火每個元素

2

使用新.promise(),它是爲了解決多個回調問題,使用它像這樣:

var counter = 0; 
jQuery("#div1, #div2").fadeIn('300').promise().done(function() 
{ 
    counter++; 
    console.log(counter); 
});