8

clearTimeout()内部setTimeout()方法在 JavaScript 中不起作用

var c = 0;
var t;

function timedCount() {
    document.getElementById('txt').value = c;
    c = c + 1;
    if (c == 5) {
        clearTimeout(t);
    }
    t = setTimeout(function () {
        timedCount()
    }, 1000);
}

jsFiddle

4

2 回答 2

10

您需要阻止执行其余代码,实际上您是t在清除setTimeout. 小提琴

var c = 0;
var t;

function timedCount() {
    document.getElementById('txt').value = c;
    c = c + 1;
    if (c == 5) {
        clearTimeout(t);
        return false;
    }
    t = setTimeout(timedCount, 1000);
}

或者只使用以下else语句:

if (c == 5) {
  clearTimeout(t);
  // do something else
}else{
  t = setTimeout(timedCount, 1000);
}
于 2013-03-15T17:30:29.440 回答
1

当您调用时,永远不会有超时来清除,clearTimeout因为最后一个已经触发,而下一个尚未设置。

你想改变你的逻辑,这样if (c !== 5) { setTimeout(etc etc) }

于 2013-03-15T17:30:48.333 回答