我不太确定这个问题的机制,但我正在尝试将单个 setTimeout 设置为一个变量 ID,我可以使用 clearTimeout 轻松取消它。但是,如果 setTimeout 在 clearTimeout 之前被触发两次,事情就会变得古怪。
例子: 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
按钮时取消上次设置的超时。
现场演示 jsFiddle .
关于javascript - 取消为一个 ID 设置的多个超时,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17199498/