clearInterval不起作用

时间:2012-01-20 02:01:33

标签: javascript

我的clearInterval有问题,它没有停止我的setInterval,这里是代码:

$(".auto-check").click(function(){
    if($('input[name=autorefresh]').is(':checked') == true){
        var intervalId = setInterval(load,4000);

    }
    else{
        alert("Auto Refresh is off");
        clearInterval(intervalId);
    }

}); 

谁能说出来,问题在哪里?

5 个答案:

答案 0 :(得分:3)

仅仅为了论证,使用jQuery .data()

的替代方法
$(".auto-check").click(function(){
    var elem = $('input[name=autorefresh]'
    if(elem.is(':checked')){
        elem.data("interval-id", setInterval(load,4000));
    }
    else{
        alert("Auto Refresh is off");
        clearInterval(elem.data("interval-id"));
        elem.removeData("interval-id");
    }
}); 

答案 1 :(得分:1)

你需要保持intervalId。在您的情况下,您在本地声明它,并在函数后丢失它。在函数外部声明它,在里面定义它,然后它将是有效的。

var intervalId;

$(".auto-check").click(function(){
if($('input[name=autorefresh]').is(':checked') == true){
    intervalId = setInterval(load,4000);

}
else{
    alert("Auto Refresh is off");
    clearInterval(intervalId);
}

}); 

答案 2 :(得分:0)

试试这个:

var intervalId = null;

$('.auto-check').click(function(){
 if($('input[name=autorefresh]').is(':checked') == true) {
   intervalId = setInterval(load,4000);
 } else {
   alert('Auto Refresh is off');
   clearInterval(intervalId);
 }
});

答案 3 :(得分:0)

正如其他人所说,你需要你的interval对象的范围大于它所包含的函数的范围,因为下次你单击元素时,将创建一个新的回调函数一个全新的范围;每次点击你的间隔都是一个全新的对象。

编辑:虽然是长视频,但这里是对范围链和执行上下文的详细解释,详细说明了执行函数时会发生什么。解释开始大约5分钟:http://googlecode.blogspot.com/2009/06/nicholas-c-zakas-speed-up-your.html

答案 4 :(得分:0)

这是怎么回事?

$(".auto-check").click(function(){
if($('input[name=autorefresh]').is(':checked') == true){
    window.intervalId = setInterval(load,4000);

}
else{
    alert("Auto Refresh is off");
    clearInterval(window.intervalId);
}

});