Javascript JS:无法使用clearInterval停止setInterval

Javascript JS:无法使用clearInterval停止setInterval,javascript,button,setinterval,clearinterval,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='Останови

你好,我又碰到了一个问题

我创建了一个使按钮像不倒翁一样工作的功能。但我找不到从另一个按钮状态用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);

}
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='Остановиться';
    }
}
而不是

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


否则,您的按钮会一直有两个侦听器。

成功了。单击按钮后,SetInterval仍然有效。您可能会添加的另一个问题是,您似乎从未删除事件侦听器。因此,每次单击时,您都会调用其中一个。如果我明白你想做什么,我编辑阿特姆苏奇科夫来解决这个问题。
buttonIdle.onclick = function() {goIdle(2)}, false);