【发布时间】:2012-01-07 12:14:23
【问题描述】:
如果我不知道setInterval()或setTimeOut()的返回值,我还能用clearInterveral(id)或clearTimeOut(id)清除它们吗?
谢谢。
【问题讨论】:
-
正确构建您的代码,以便您始终拥有 ID。
标签: javascript jquery time timeout
如果我不知道setInterval()或setTimeOut()的返回值,我还能用clearInterveral(id)或clearTimeOut(id)清除它们吗?
谢谢。
【问题讨论】:
标签: javascript jquery time timeout
您可以像这样替换原来的 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 );
等等..
【讨论】:
window.setTimeout() 和 window.setInterval() 的返回值大部分没有记录(无参考、无标准、封闭源代码),并且可能会更改,因此您的方法不可靠。尝试替换宿主对象的方法是另一个非常糟糕的主意。
handle 除了它的类型,并且它在后续调用中必须是唯一的。
您可以为此使用基于注册模式的对象。
【讨论】:
据我所知,如果没有原始 ID,这是不可能的,因此将其存储在数组中可能是个好主意
【讨论】: