Javascript set / clearinterval不起作用

时间:2013-04-03 18:58:04

标签: javascript

如何在javascript中停止间隔?

为什么间隔不会停止?

setInterval(alarm, 500);
window.clearInterval(alarm);

也尝试过:

window.setInterval(alarm, 500);
window.clearInterval(alarm);

始终存在同样的问题:(

仍然不起作用:

var switc = 1;
getValue();
function getValue (){
if(switc == 1){
    var myTimer = window.setInterval(alarm, 500);
}
else if(switc == 0){
    window.clearInterval(myTimer);
}
}
function alarm(){
    console.log("test");
}

4 个答案:

答案 0 :(得分:11)

调用setInterval时,它返回一个用于取消事件的整数。将其存储到变量中并使用该变量取消事件。

var myTimer = window.setInterval(alarm, 500);
window.clearInterval(myTimer);

编辑:

您的代码不起作用,因为myTimer是一个局部变量,每次调用该函数时都会重置!

让它全球化。

var myTimer = null;
function getValue (){
    if(switc == 1){
        myTimer = window.setInterval(alarm, 500);
    }
    ...

MDN文档:window.setInterval

重复调用函数或执行代码片段,每次调用该函数之间都有固定的时间延迟。

<强>语法

var intervalID = window.setInterval(func, delay[, param1, param2, ...]);
var intervalID = window.setInterval(code, delay);

,其中

  • intervalID是您可以传递给clearInterval()的唯一间隔ID。
  • func是您想要重复调用的函数。
  • 备用语法中的
  • code是您希望重复执行的一串代码(建议不要使用此语法,原因与使用eval()相同)
  • delay是每次调用func之前setInterval()函数应该等待的毫秒数(千分之一秒)。与setTimeout一样,强制执行最小延迟。 请注意,在第一种语法中将其他参数传递给函数在Internet Explorer中不起作用。如果要在该浏览器上启用此功能,则必须使用兼容性代码(请参阅回调参数段落)。

答案 1 :(得分:2)

该代码表明对API的误解。 setInterval()函数有两个参数:一个要调用的函数,一个表示调用之间的毫秒数的数字。函数返回标识该特定间隔计时器的标记(数字)。可以将令牌传递给clearInterval()以取消计时器。

答案 2 :(得分:1)

您要清除不存在的间隔。将setInterval()返回的id分配给变量,并在clearInterval()中使用它。

在您的情况下,警报是执行的功能,而不是间隔ID

var interval = setInterval(alarm, 500);
clearInterval(interval);

答案 3 :(得分:1)

var timer = setInterval(alarm, 500);
Window.clearInterval(timer);

function alarm() {
    // Do stuff
}

您需要将间隔的句柄保存到变量中,以便稍后在要清除/停止它时可以引用它。