如何清除所有setInterval()和setTimeOut()而不知道他们的ID?

时间:2012-01-07 12:14:24

标签: javascript jquery time timeout

如果我不知道setInterval()setTimeOut()的返回值,我仍然可以使用clearInterveral(id)clearTimeOut(id)来清除它们吗?

感谢。

3 个答案:

答案 0 :(得分:4)

您可以将原来的setTimeout和setInterval替换为:

   setInterval = (function( oldsetInterval){
    var registered=[],
    f = function(a,b){
        return registered[ registered.length ] = oldsetInterval(a,b)
    };
     f.clearAll = function(){
        var r;
        while( r = registered.pop()) { 
           clearInterval( r );
        }       
    };
    return f;    
})(window.setInterval);

现在:

setInterval( function(){alert(5000)}, 5000 );
setInterval( function(){alert(10000)}, 10000 );

setInterval.clearAll();

建议来自@PointedEars的评论你不应该使用相同的名字:

reportingSetInterval = as above;
reportingSetInterval( function(){alert(5000)}, 5000 ); 

依旧......

答案 1 :(得分:1)

您可以使用基于寄存器模式的对象。

答案 2 :(得分:1)

据我所知,如果没有原始id,这是不可能的,所以存储它,可能在数组中是个好主意