如何杀死一个javascript setTimeout循环

时间:2013-07-30 00:15:56

标签: jquery

我有这个循环可以正常工作:

function countdown(counter) {
    x = counter;
    if (x > 0) {
        x--;
        alert(x + "/5");
        if (x > 0) {
            setTimeout(function () {
                countdown(x);
            }, 500);
        }
    }
};

countdown(6);

但是我希望能够杀死它,然后按一下按钮再次启动它。我想重新启动循环,无论按下按钮时它是什么号码。

在过去的几个小时里,我无处可去。

这是一个jsfiddle:http://jsfiddle.net/4vtPH/4/

4 个答案:

答案 0 :(得分:6)

您可以使用clearTimeout (documentation)

var timeout;
function countdown(counter) {
    x = counter;
    if (x > 0) {
        x--;
        alert(x + "/5");
        if (x > 0) {
            timeout = setTimeout(function () {
                countdown(x);
            }, 2000);
        }
    }
};
$('input').click(function() {
    clearTimeout(timeout);
    countdown(6);
});
countdown(6);

Fiddle

答案 1 :(得分:0)

你应该看看the documentation for setTimeout

它返回超时ID ,您可以使用clearTimeout进行重置。

答案 2 :(得分:0)

首先,您需要将setTimeout分配给变量。

var timeout = setTimeout(..

然后在需要时您可以使用clearTimeout(timeout)。确保您的超时变量的范围可以在您需要访问它的任何地方访问它。

答案 3 :(得分:0)

如何使用间隔进行倒计时?这是另一种解决方案(DEMO):

function Countdown(counter) {
    this.interval = 0;
    this.x = counter;
    console.log(this.x + "/"+counter);
    this.start = function() {
        var self = this;
        this.interval = setInterval(function () {
            self.x--;
            console.log(self.x + "/"+counter);
            if(self.x == 0) self.stop();
        }, 2000);
    };

    this.stop = function() {
        clearInterval(this.interval);  
    };
};

var c = new Countdown(7);
c.start();

var c2 = new Countdown(4);

c2.start();