如何在不知道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,这是不可能的,所以存储它,也许在数组中是个好主意