2011-11-21 100 views
0

以下是重現此問題的示例。爲什麼onComplete函數被執行多次?

<script> 
    $(document).ready(function(){ 
     var repeatedTimes = 0; 
     $.colorbox({html:'hello1'}); 
     $.colorbox({html:'hello2'}); 
     $.colorbox({html:'hello3'}); 
     $.colorbox(
     { 
      html:'hello4', 
      onComplete: function() { 
       alert("repeat " + repeatedTimes++ + " times."); 
      } 
     }); 
    }); 
</script> 

爲什麼onComplete函數執行多次?

注意:此代碼僅用於重現問題。在真實的風景中,在colorbox調用之間,執行其他代碼。

注意:在這種情況下,colorbox用於顯示通常較長時間的進程之間的消息。問題在於這些過程短缺時。

回答

0

我不熟悉這個模塊,但你應該嘗試調用對specifix元素的插件,而不僅僅是$。

嘗試$(「HTML」)。顏色框,不管它是什麼......

+0

在colorbox文檔中說: //直接調用HTML $ .colorbox({html:「

Welcome

」}); – angelcervera

+0

'$ .colobox()'確實是這個插件的預期用法。當然,這也是你在這裏提到的方式。但實際上有很多插件 - 更不用說建立在函數中($ .ajax,$ .post) - 以這種方式調用。 – Donamite

0

呈粘稠指出的那樣,你將永遠不會有一個需要調用顏色框以這種方式。任何你有$.colorbox()的地方,都會立即打開彩盒(即使你設置了open:false選項)。儘管您看不到前3個電話,因爲可見部分的控制是在下一個電話中立即採取的,但他們仍然運行完整的過程。這也意味着如果你定義了onLoadonOpenonCleanup回調,它們也會被調用4次。因爲它發生得如此之快,在所有4次呼叫運行onComplete時,現在無論在最後一次呼叫中如何設置。

但是,如果每個都在最後一個完成執行後執行,那麼您不會看到發生這種情況。例如:

$(document).ready(function() { 
    var repeatedTimes = 0; 

    $.colorbox({html:'hello1'}); 
    setTimeout(function(){ 
     $.colorbox({html:'hello2'}); 
    }, 1000); 
    setTimeout(function(){ 
     $.colorbox({html:'hello3'}); 
    }, 2000); 
    setTimeout(function(){ 
     $.colorbox({ 
      html:'hello4', 
      onComplete: function() { 
       alert("repeat " + repeatedTimes++ + " times."); 
      } 
     }); 
    }, 3000); 
}); 

工作你期望的方式 - 或者說,僅調用一次的onComplete。我想你可以用它作爲某種橫幅或某種東西,但有更好的方法來做這種事情。

相關問題