在发生之前取消/杀死window.setTimeout()


194

例如,我在几个地方使用以下行清除状态。我有一些闲逛时间超过10秒钟或更长时间,并且如果用户单击四周,操作可能会在不正确的时间间隔发生。

window.setTimeout(function() { removeStatusIndicator(); }, statusTimeout);

是否可以使用一些jQuery或JavaScript代码取消或取消此操作,所以我没有这个过程了吗?

Answers:


373
var timer1 = setTimeout(function() { removeStatusIndicator(); }, statusTimeout);

clearTimeout(timer1)

101
window只是全局名称空间的名称,因此实际上并没有必要(对于setTimeout或clearTimeout)。
马修·克鲁姆利

7
由于setTimeout的第一个参数是一个函数,而'removeStatusIndicator()'是一个函数,因此,您可以通过简单的方式获得性能(并减少输入):var timer1 = setTimeout(removeStatusIndicator,statusTimeout); 这样可以避免嵌套函数调用。
HarleyDave 2014年

5
并且window.clearTimeout(timer1)无法在Node.js中使用。只需使用clearTimeout(timer1)global.clearTimeout(timer1)
CL22 2016年

2
@ user1944491不会有双重调用:请注意@HarleyDave已编写setTimeout(removeStatusIndicator, ...),即removeStatusIndicator未调用该函数。
Frerich Raabe

3
请忽略@ user1944491所说的-这是错误的。传递给setTimeout的函数不会被调用两次。Chrome并未更改其行为,很有可能是您通过调用函数setTimeout( func(), 0 )而不是setTimeout( func, 0 )
Sethi

2

window.clearTimeout()应该可以实现您想要的目标。


6
请解释您的答案并提供一些示例。一个好的答案总是可以解释这样做的原因以及为什么这样做,不仅对于OP,而且对于将来的SO访问者。
B001ᛦ16年

4
+1只是因为上面的评论对我来说绝对无关紧要,而且很随意。答案看起来非常好,它是稍后发布的,因此它更像是已提供答案的“复制粘贴”。
vir us
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.