有没有办法一次清除所有JavaScript计时器?

Jen*_*ens 23 javascript jquery timer

我正在使用jQuery .load为我的网站构建一个自动刷新评论部分.所以我使用javascript'setTimeout'计时器来检查新的评论.

但是在做了一些改变评论页面或删除(所有使用ajax)之类的东西后,一些旧的计时器继续运行,即使我在加载新的ajax内容之前使用了clearTimeout.

当我加载新的ajax内容时,有没有办法清除所有javascript计时器?

Oma*_*awi 42

警告:我的代码以下是有问题的,主要是因为要求本身是有问题的.我想知道你为什么要以任何方式清除所有计时器.这使得您的代码破坏了使用计时器的任何插件.这比你想象的要常见得多,除非你正在调试或玩得开心,否则没关系.


如果你必须:

这是最糟糕的解决方案之一.然而,它揭示了JavaScript本身的潜在安全漏洞.但是因为它只是工作(清除所有的计时器)我认为分享它会很酷:

var maxId = setTimeout(function(){}, 0);

for(var i=0; i < maxId; i+=1) { 
    clearTimeout(i);
}
Run Code Online (Sandbox Code Playgroud)

  • 虽然接受的答案是一个很酷的最佳实践,但这回答了标题中提出的问题. (4认同)

Dar*_*rov 24

javascript中没有通用功能允许您清除所有计时器.您需要跟踪您创建的所有计时器.为此,您可以使用全局数组:

var timers = [];
...
// add a timer to the array
timers.push(setTimeout(someFunc, 1000));
...
// clear all timers in the array
for (var i = 0; i < timers.length; i++)
{
    clearTimeout(timers[i]);
}
Run Code Online (Sandbox Code Playgroud)