1

タイマーをクリアするセレクターがあると非常に面倒ですが、タイマーが設定されていないと、プログラムは でスタックしclearInterval()ます。この Fiddle を見てください: http://jsfiddle.net/tw4A7/

ボタン 1 は へsetInterval()、ボタン 2 は へ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");
});
4

2 に答える 2

3

ループが定義されていないためです。

ブラウザのコンソールを見ると、 というエラーがあることがわかりますUncaught ReferenceError: loop is not definedloopこれは、まだ定義されていないという変数を参照しようとしているためです。

最初に押す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");
});

デモ:フィドル

于 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 に答える