反之速度加快

时间:2013-06-07 17:10:28

标签: javascript jquery

我不明白为什么这个脚本会在每次点击“开始”时使计数器加速。我需要插入什么才能防止这种情况发生?

var count = 1;
var counting = function () {
    timer = setInterval(function () {
        $('#numbers').html(count);
        count++;
    }, 1000);
    function counting() {};
}
$("#start").click(counting);
$('#stop').click(function () {
    clearTimeout(timer);
});
$('#reset').click(function () {
    count = 0;
    $('#numbers').html(count);
});

2 个答案:

答案 0 :(得分:3)

您需要将setIntervalclearInterval匹配,而不是clearTimeout

如果计时器已经启动,您还需要阻止对counting的其他来电,例如在$('#start').prop('disabled', true)内加counting个电话。

或者,只需确保在致电clearInterval(timer)

之前立即致电timer = setInterval(...)

答案 1 :(得分:0)

这是因为每次点击“开始”时,它都会调用创建间隔的函数。再次调用setInterval函数不会停止前一个时间间隔。

快速解决方案是在clearInterval( timer )之前致电setInterval(...),如下所示:

var timer;
var counting = function() {
    clearInterval( timer );
    timer = setInterval( function() {
        $('#numbers').html( count );
        count++;
    }, 1000 );
}

请注意,我事先声明了timer,因为第一次点击“开始”会产生类似timer is undefined之类的错误。