jQuery对一个回调计数调用的多个回调

时间:2012-06-22 10:10:23

标签: javascript jquery

我需要在多个回调中进行一次回调。用一个简单的"类" MultiCallback计算似乎要解决的调用。 但是jQuery的fadeIn函数只调用一次mCallback。

必须调用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>

2 个答案:

答案 0 :(得分: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元素可能无法使用。

  3. fixed code on jsFiddle