有没有办法一次清除所有JavaScript计时器?
我正在使用jQuery .load为我的网站构建一个自动刷新评论部分。 所以我使用javascript’setTimeout’计时器来检查新的评论。
但是在做了一些改变评论页面或删除(所有使用ajax)之类的东西之后,一些旧的计时器继续运行,即使我在加载新的ajax内容之前使用了clearTimeout。
当我加载新的ajax内容时,有没有办法清除所有的javascript计时器?
javascript中没有允许您清除所有计时器的一般function。 您需要跟踪您创建的所有计时器。 为此,您可以使用全局数组:
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]); }
警告:我的代码下面存在问题,主要是因为需求本身存在问题。 我想知道你为什么要以任何方式清除所有计时器 。 这使得您的代码破坏了使用计时器的任何插件。 这比你想象的要常见得多,除非你正在调试或玩得开心,否则没关系。
如果你必须:
这是最糟糕的解决方案之一。 然而,它揭示了JavaScript本身的潜在安全漏洞。 但由于它只是起作用(清除所有定时器),我认为分享它会很酷:
var maxId = setTimeout(function(){}, 0); for(var i=0; i < maxId; i+=1) { clearTimeout(i); }
您可能需要考虑使用jQuery Timers ,它抽象出setTimeout / setInterval的许多“丑陋”细节,并使它们更容易在代码中用于您所描述的内容。
这可能有所帮助。 我有一个案例,即用户是创建定时器的人,类似于开放的开发平台,显然我无法访问那些定时器的ID。 因此,我需要对它们进行沙箱处理并在必要时将它们全部删除。 为此,我创建了一个隐藏的