2

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

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

在我自己的函数上也测试了我的 MultiCallback 类,没有任何问题。我知道还有其他方法,例如使用 jQuery 隐藏多个元素并获取一个回调......只是想知道我的逻辑有什么问题。

<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>
4

2 回答 2

2

改变

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

// pass a reference to the function
$(allElements).fadeIn(400, multiCallback.mCallback); 
于 2012-06-22T10:21:19.160 回答
1
  1. 将 multiCallback.mCallback() 替换为 multiCallback.mCallback

  2. 将您的代码放入其中,$(function(){ ... });因为此时 DOM 元素可能不可用。

jsFiddle上的固定代码

于 2012-06-22T10:33:35.633 回答