8
$("#div1, #div2").fadeIn('500',function(){
    {
        console.log('Test');
    }
});

在这里小提琴:http: //jsfiddle.net/y97h9/

上面的代码将在控制台中打印两次“测试”。我怎样才能让它只打印一次。是否可以?

4

3 回答 3

27

当然,您可以使用 jQuery Promise来解决多个回调问题:

$("#div1, #div2").fadeIn('500').promise().done(function()
{
    console.log('Test');
});

.promise() 方法返回一个动态生成的 Promise,一旦绑定到集合的特定类型的所有操作(无论是否排队)都结束,该 Promise 就会被解析

工作演示

于 2013-04-08T14:54:08.097 回答
3

回调将为每个匹配的元素运行一次。您始终可以设置一个标志以查看它是否已经运行:

var hasRun = false;
$("#div1, #div2").fadeIn('500', function() {
    if (hasRun) return;
    console.log('Test');
    hasRun = true;
});
于 2013-04-08T14:54:18.417 回答
-1

使用布尔标志来防止 console.log('Test'); 从被调用两次。

var isCalled = false;
$("#div1, #div2").fadeIn('500',function(){
    if(!isCalled) {
        isCalled = true;
        console.log('Test');
    }
});
于 2013-04-08T14:58:45.077 回答