取消设置为ID的多个超时



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

的例子:http://www.w3schools.com/js/tryit.asp?filename=tryjs_settimeout2

点击"Try It"两次,再点击"Stop the Alert"两次,设置超时的功能仍然会被调用。同样,我不确定为什么Try It会触发函数两次,考虑到事件被保存到一个正在被覆盖的变量。

你知道这是怎么回事吗?

正如MCL所解释的那样,您将失去对先前超时的引用,因为新的赋值将覆盖它。

你能做的就是把超时放到一个数组中:

var myTimer = [];
function myFunction () {
    myTimer.push(setTimeout(function(){alert("Hello")},3000));
}
function myStopFunction () {
    clearTimeout(myTimer.pop());
}

这样就可以取消上次点击Stop the alert按钮时设置的超时时间。

相关内容

  • 没有找到相关文章