3

我有这个功能:

function timedFunction(functionString,timeoutPeriod) {
setTimeout(functionString+"timedFunction(\""+functionString+"\","+timeoutPeriod+");",timeoutPeriod);}

这个函数我叫:

 timedFunction("startStopky();",1000);

startStopky(); 是我希望在指定的时间间隔内重复运行的函数。一切都很好,但如果我想停止这个间隔,我必须停止如下:

for (var i = 1; i < 99999; i++) {
            window.clearInterval(i);
        }

不幸的是,这将停止所有间隔,我只想停止一个特定的间隔。我该怎么做?

4

4 回答 4

4

而不是做递归调用timedFunction来做:

var intervalId = setInterval(startStopky, 1000);

并清除它只是做:

clearInterval(intervalId);
于 2013-05-06T18:52:38.403 回答
2

setTimeout函数返回一个超时 ID,您可以使用它clearTimeout来删除该超时。间隔也是如此,但在这种情况下,它是一个setIntervalclearInterval组合。

例如:

var t = setTimeout(yourFunction, 1000);
clearTimeout(t);

var i = setInterval(yourFunction2, 500);
clearInterval(i);
于 2013-05-06T18:54:07.653 回答
1

你有一个超时,但你正在清除一个间隔。clearInterval清除间隔,而不是超时。

你要window.clearTimeout(timeoutId)

如果要停止单个,请使用该间隔的 processId。

window.clearTimeout("13");
于 2013-05-06T18:52:51.773 回答
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);
于 2013-05-06T18:58:01.570 回答