我有这个功能:
function timedFunction(functionString,timeoutPeriod) {
setTimeout(functionString+"timedFunction(\""+functionString+"\","+timeoutPeriod+");",timeoutPeriod);}
这个功能我打电话:
timedFunction("startStopky();",1000);
startStopky();是我想要在指定的时间间隔内重复运行的函数。一切都很好,但如果我想停止这个间隔,我必须停止如下:
for (var i = 1; i < 99999; i++) {
window.clearInterval(i);
}
不幸的是,这将停止所有间隔,我想停止一个特定的。我该怎么办?
答案 0 :(得分:3)
而不是对timedFunction
进行递归调用,只需执行:
var intervalId = setInterval(startStopky, 1000);
并清除它只是:
clearInterval(intervalId);
答案 1 :(得分:2)
setTimeout
函数返回与clearTimeout
一起使用的超时ID,以删除该超时。对于间隔也是如此,但在这种情况下,它是setInterval
和clearInterval
组合。
E.g:
var t = setTimeout(yourFunction, 1000);
clearTimeout(t);
var i = setInterval(yourFunction2, 500);
clearInterval(i);
答案 2 :(得分:1)
您有超时,但您正在清除间隔。 clearInterval
清除间隔,而不是超时。
您需要window.clearTimeout(timeoutId)
如果要停止单个,请使用该时间间隔的processId。
window.clearTimeout("13");
答案 3 :(得分:0)
你真的不应该使用字符串来执行此操作:
function timedFunction(fn, interval) {
var timerHandle;
function runIt() {
fn();
timerHandle.id = setTimeout(runIt, interval);
}
return timerHandle = { id: setTimeout(runIt, interval) };
}
然后你可以这样称呼它:
var handle = timedFunction(startStopky, 1000);
停止这个过程:
clearTimeout(handle.id);