JS:不能使用clearInterval停止setInterval

时间:2013-11-05 18:04:32

标签: javascript button setinterval clearinterval

你好:我再次遇到问题。

我创建了一个让按钮工作的功能,例如,呃,不倒翁。但我无法找到一种方法来从另一个按钮状态使用clearInterval来停止setInterval。

function goIdle(checker)
{
if(checker===1){
buttonDeeper.disabled=true;
var intIdle=(setInterval(goDeeperTest, 2000));//(600000-(bootTier*600)));
buttonIdle.value='Остановиться';
buttonIdle.addEventListener('click', function() {goIdle(2)}, false);
}
if (checker===2) {
clearInterval(intIdle);
buttonDeeper.disabled = false;
buttonIdle.value='Разбежаться';
buttonIdle.addEventListener('click', function() {goIdle(1)}, false);

}

2 个答案:

答案 0 :(得分:3)

intIdle变量是goIdle函数执行一次的本地变量。在外部作用域中声明它,以便它保持在函数执行之间:

var intIdle;
function goIdle(checker)
{
if(checker===1){
buttonDeeper.disabled=true;
intIdle=(setInterval(goDeeperTest, 2000));//(600000-(bootTier*600)));
buttonIdle.value='Остановиться';
buttonIdle.addEventListener('click', function() {goIdle(2)}, false);
}
if (checker===2) {
clearInterval(intIdle);
buttonDeeper.disabled = false;
buttonIdle.value='Разбежаться';
buttonIdle.addEventListener('click', function() {goIdle(1)}, false);

}

但另一个问题是你似乎永远不会删除事件监听器。所以在每次点击时,你再打一次。它不能工作。你真正想要的是

buttonIdle.addEventListener('click', goIdle, false);
var intIdle;
function goIdle() {
    if (intIdle) {
        clearInterval(intIdle);
        buttonIdle.value='Разбежаться';
        buttonDeeper.disabled = false;
        intIdle = 0;
    } else {
        intIdle=setInterval(goDeeperTest, 2000);
        buttonDeeper.disabled = true;
        buttonIdle.value='Остановиться';
    }
}

答案 1 :(得分:0)

而不是

buttonIdle.addEventListener('click', function() {goIdle(2)}, false);

使用

buttonIdle.onclick = function() {goIdle(2)}, false);

否则你的按钮会有2个听众。