Javascript 如何执行该函数一次?

Javascript 如何执行该函数一次?,javascript,jquery,fadein,Javascript,Jquery,Fadein,在这里拉小提琴: 上述代码将在控制台中打印两次“Test”。我怎样才能使它只打印一次。有可能吗?当然,您可以使用jQuery解决多个回调问题: $("#div1, #div2").fadeIn('500',function(){ { console.log('Test'); } }); .promise()方法返回一个动态生成的承诺,该承诺是 一旦绑定到集合的特定类型的所有操作都已解决, 排队与否,已结束 对于每个匹配的元素,回调将运行一次。您始终可以设置一个标

在这里拉小提琴:

上述代码将在控制台中打印两次“Test”。我怎样才能使它只打印一次。有可能吗?

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

$("#div1, #div2").fadeIn('500',function(){
    {
        console.log('Test');
    }
});
.promise()方法返回一个动态生成的承诺,该承诺是 一旦绑定到集合的特定类型的所有操作都已解决, 排队与否,已结束


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

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

使用布尔标志防止console.log('Test');避免被打两次电话

var hasRun = false;
$("#div1, #div2").fadeIn('500', function() {
    if (hasRun) return;
    console.log('Test');
    hasRun = true;
});

你除了什么?如果div2不存在?在控制台中测试还是不测试?将布尔值放在检查外部,在检查内部切换。您已经在两个不同的DOM元素上调用了该函数。函数被调用两次是正常的。您还期望发生什么?可能重复(未标记的答案就是您正在查找的答案)
fadeIn
的第一个参数需要是
字符串(“慢”或“快”)或
数字(表示动画完成所需的毫秒)。传递“500”将只使用默认的
400
毫秒,因为它是
字符串
。如果
#div1
#div2
fadeIn
之外已经有动画发生,会发生什么?会不会等得太久(可能)?也许我是misunderstanding@ian可以,是的。虽然我怀疑这种情况会经常发生,但我认为它是一个边缘情况,当它出现时,必须处理它。这是一个美丽的答案!1@KevinB我不认为这是一个边缘案例……我认为这是相当普遍/可能的。在这里使用
promise()
远远不是一个解决方案。任何元素都可以随时应用特定的动画。使用
promise()。这里有一个失败的例子:@Ian放松点,我能理解你的意思。我只是给OP一个最好的方法来解决他目前的处境。有时,我们不能用一个答案涵盖可能发生的所有方面:)非常丑陋。这是JavaScript和jQuery中的一个问题,这不是要使用的解决方案。@meagar我不知道
promise
如何解决这个问题……这个答案一点也不“难看”。“事实上,它是正确的。@meagar它不是特别聪明,但它是直截了当的,不会受到user1479606答案中讨论的一些微妙问题的影响。然而,如果你在同一时间没有其他动画的话,我更喜欢他的答案。伊恩,谢谢:)
var isCalled = false;
$("#div1, #div2").fadeIn('500',function(){
    if(!isCalled) {
        isCalled = true;
        console.log('Test');
    }
});