程序卡在clearInterval()

时间:2013-05-17 06:53:53

标签: javascript jquery html

我意识到当我有一个清除定时器的选择器但是如果没有设置定时器时会很麻烦,程序将停留在clearInterval()。看看这个小提琴:http://jsfiddle.net/tw4A7/

按钮一到setInterval(),按钮二到clearInterval()。如果我先点击按钮2,它将卡住,并且不会继续执行该功能的其余部分。这只是某些情况的一个例子,我可能有一个条件或选择器来设置定时器,当满足另一个条件时,它必须从定时器循环中退出。

但是,当然,如果我将clearInterval()放在函数的最后部分,它就可以解决。但是有时候,在做其他事情之前必须先停止计时器。

有没有办法检查计时器是否已启动?只有这样才会明白?否则,它会跳过clearInterval()并继续?

作为请求,hjpotter:

$('#1').click(function(){
    $('#test').append("0");
loop=setInterval(function(){
    $('#test').append("1");

}, 1000);
});

$('#2').click(function(){
   window.clearInterval(loop);
   $('#test').html("2");
});

2 个答案:

答案 0 :(得分:3)

这是因为循环未定义。

如果您查看浏览器控制台,则可以看到出现错误Uncaught ReferenceError: loop is not defined。这是因为您正在尝试引用尚未定义的名为loop的变量。

当您先按Button1时,您可以定义变量并使用间隔值启动它,这就是错误未抛出的原因。

由于您使用loop作为共享全局变量,解决方案是在两个方法之间共享的范围内使用var语句定义变量。

var loop;
$('#1').click(function(){
    $('#test').append("0");
    loop=setInterval(function(){
        $('#test').append("1");

    }, 1000);
});
$('#2').click(function(){
    window.clearInterval(loop);
    $('#test').html("2");
});

演示:Fiddle

答案 1 :(得分:0)

我认为最好定义一个数组来保存单击按钮时创建的计时器,如果不是这样,多次单击按钮1,甚至定义计时器,每次新计时器都会替换它,所以你无法阻止以前的计时器。

var loopList;
$('#1').click(function(){
    $('#test').append("0");
    var loop=setInterval(function(){
        $('#test').append("1");

    }, 1000);
    loopList.push(loop);
});
$('#2').click(function(){
    $.each(loopList,function(i,n){
        window.clearInterval(n);
    });
    $('#test').html("2");
});