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

时间:2009-12-13 15:53:42

标签: javascript jquery timer

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

但在做了一些更改评论页面或删除(全部使用ajax)之后,一些旧的计时器仍在运行,即使我在加载新的ajax内容之前使用了clearTimeout。

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

4 个答案:

答案 0 :(得分:41)

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


如果您必须:

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

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

for(var i=0; i < maxId; i+=1) { 
    clearTimeout(i);
}

答案 1 :(得分: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]);
}

答案 2 :(得分:2)

您可能需要考虑使用jQuery Timers,它会抽象出setTimeout / setInterval的许多“丑陋”细节,并使它们更容易在您的代码中用于您所描述的内容。

答案 3 :(得分:1)

这可能会有所帮助。我有一个案例,用户是创建计时器的人,就像开放的开发平台一样,显然我无法访问这些计时器的ID。因此,我需要将其沙盒化,并在必要时将其全部删除。为此,我创建了一个隐藏的