1

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

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

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");
});
4

2 回答 2

3

这是因为循环未定义。

如果您查看浏览器控制台,您会看到有一条错误消息Uncaught ReferenceError: loop is not defined。这是因为您试图引用一个loop尚未定义的名为的变量。

当您按下第一个时Button1,您定义变量并使用间隔值启动它,这就是错误没有抛出的原因。

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

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

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

演示:小提琴

于 2013-05-17T06:59:55.503 回答
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");
});
于 2013-05-17T07:56:27.587 回答