javascript:清除所有超时?

2022-08-30 04:38:57

有没有办法从给定的窗口清除所有超时?我假设超时存储在对象中的某个位置,但无法确认。window

欢迎任何跨浏览器解决方案。


答案 1

它们不在窗口对象中,但它们具有 ID,这些 ID (afaik) 是连续的整数。

因此,您可以清除所有超时,如下所示:

var id = window.setTimeout(function() {}, 0);

while (id--) {
    window.clearTimeout(id); // will do nothing if no timeout with id is present
}

答案 2

我认为实现这一点的最简单方法是将所有标识符存储在一个数组中,您可以在其中轻松迭代到所有这些标识符。setTimeoutclearTimeout()

var timeouts = [];
timeouts.push(setTimeout(function(){alert(1);}, 200));
timeouts.push(setTimeout(function(){alert(2);}, 300));
timeouts.push(setTimeout(function(){alert(3);}, 400));

for (var i=0; i<timeouts.length; i++) {
  clearTimeout(timeouts[i]);
}