首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >javascript:清除所有超时?

javascript:清除所有超时?
EN

Stack Overflow用户
提问于 2012-01-14 12:39:07
回答 11查看 91.3K关注 0票数 118

有没有办法清除给定窗口中的所有超时?我认为超时存储在window对象中的某个地方,但无法确认。

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

EN

回答 11

Stack Overflow用户

回答已采纳

发布于 2012-01-14 12:43:36

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

因此,您可以像这样清除所有超时:

代码语言:javascript
复制
var id = window.setTimeout(function() {}, 0);

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

Stack Overflow用户

发布于 2012-01-14 12:45:12

我认为实现这一点的最简单方法是将所有setTimeout标识符存储在一个数组中,这样您就可以很容易地对所有这些标识符迭代到clearTimeout()

代码语言:javascript
复制
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]);
}
票数 94
EN

Stack Overflow用户

发布于 2013-05-08 19:55:27

我有一个对Pumbaa80's answer的补充,可能对为旧IE开发的人有用。

是的,所有主流浏览器都将超时is实现为连续整数(即not required by specification)。尽管不同浏览器的起始号是不同的。似乎Opera,Safari,Chrome和IE >8从1开始超时It,基于壁虎的浏览器从2开始,IE <= 8从某个随机数字开始,这些数字在选项卡刷新时被神奇地保存下来。你可以使用discover it yourself

所有这些都意味着在IE <=8中,while (lastTimeoutId--)周期可能会运行超过8位数的时间,并显示“此页上的脚本正在导致Internet Explorer运行缓慢”的消息。因此,如果你不能超时或者不想超时,你可以考虑把第一个save all you timeout id's id保存在页面上,并在此之前清除超时。

在早期页面加载时执行代码:

代码语言:javascript
复制
var clearAllTimeouts = (function () {
    var noop = function () {},
        firstId = window.setTimeout(noop, 0);
    return function () {
        var lastId = window.setTimeout(noop, 0);
        console.log('Removing', lastId - firstId, 'timeout handlers');
        while (firstId != lastId)
            window.clearTimeout(++firstId);
    };
});

然后清除所有挂起的超时,这些超时可能由外部代码多次设置

票数 12
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/8860188

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档