你好:我再次遇到问题。
我创建了一个让按钮工作的功能,例如,呃,不倒翁。但我无法找到一种方法来从另一个按钮状态使用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);
}
答案 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个听众。