取消设置为ID的多个超时

时间:2013-06-19 19:16:39

标签: javascript timeout settimeout

我不太确定这个问题的机制,但是我试图将一个setTimeout设置为一个变量ID,我可以使用clearTimeout轻松取消它。但是,如果setTimeout在clearTimeout之前被触发两次,那么事情就会变得很糟糕。

实施例: http://www.w3schools.com/js/tryit.asp?filename=tryjs_settimeout2

单击“Try It”两次然后“Stop the Alert”两次,仍然会调用set timeout的功能。同样,我不确定为什么尝试它会触发该函数两次,因为事件被保存到一个被覆盖的变量。

知道这里发生了什么?

1 个答案:

答案 0 :(得分:4)

就像MCL解释的那样,你失去了对先前超时的引用,因为新的赋值会覆盖它。

您可以做的是将超时放入数组:

var myTimer = [];

function myFunction () {
    myTimer.push(setTimeout(function(){alert("Hello")},3000));
}

function myStopFunction () {
    clearTimeout(myTimer.pop());
}

这样,您可以在点击Stop the alert按钮时取消上次设置超时。

jsFiddle的现场演示。