2012-06-22 43 views
2

我只需要一个回调和多个回调。用一个简单的“类”MultiCallback来计算它似乎要解决的调用。 但jQuery的fadeIn函数只调用一次mCallback。jQuery多个回调到一个回调计数调用

它必须调用mCallback 3次。这通过在顶部范围内直接使用回调函数来实现。

测试我的MultiCallback类也在我自己的功能没有任何问题。我知道 还有其他方式,如Hide multiple elements with jQuery and get one callback ... 只是想知道我的逻辑有什么问题。

<div id="1" style="display: none; background-color: green;"></div> 
<div id="2" style="display: none; background-color: red;"></div> 
<div id="3" style="display: none; background-color: blue;"></div> 

<script> 

    var allElements = "#1, #2, #3"; 
    var multiCallback = new MultiCallback($(allElements).length, function() 
      { 
       console.log("NEVER ENTER CALLBACK"); 
      }); 
    $(allElements).fadeIn(400, multiCallback.mCallback()); 

    function MultiCallback(limit, fn) 
    { 
     var finishedCalls = 0; 

     function mCallback() 
     { 
      // Just enter one time ! 
      if (++finishedCalls == limit) 
      { 
       fn(); 
      } 
     } 

     return { 
      mCallback : mCallback 
     } 
    } 

</script> 
+0

你的目标是在时间相继淡出的div吗? – Cranio

+0

请注意,您正在调用三次回调,但它们会在同一时间执行。这就是我问的原因。 – Cranio

+0

@Cranio是的,我想同时淡化所有3个div。有没有像在c#中的“锁定”? –

回答

2

变化

// executes function, returns undefined, passing undefined 
$(allElements).fadeIn(400, multiCallback.mCallback()); 

// pass a reference to the function 
$(allElements).fadeIn(400, multiCallback.mCallback); 
+1

谢谢,这很明显。有一个傻瓜。 –

1
  1. 更换multiCallback.mCallback()来multiCallback.mCallback

  2. 场所内$(function(){ ... });你的代码,因为DOM元素在那个时候可能不可用。

fixed code on jsFiddle