我需要在多个回调中进行一次回调。用一个简单的"类" 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>
答案 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)
将multiCallback.mCallback()替换为multiCallback.mCallback
将您的代码置于$(function(){ ... });
内,因为此时DOM元素可能无法使用。