2011-11-21 51 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。我想你可以用它作为某种横幅或某种东西,但有更好的方法来做这种事情。

相关问题