如何在不知道ID的情况下清除所有setInterval()和setTimeOut()?

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

谢谢。

你可以替换原来的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 ); 

等等..

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

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