2010-12-29 8 views
1

私のコードは次のようである:JS:window.setIntervalはまだバックグラウンドで動作していますか?

window.setInterval(updateSeconds, 1000); 
function updateSeconds() { 
    var remainingSeconds = $('#seconds').html() - 1; 
    if(remainingSeconds < 0) { 
     remainingSeconds = 0; 
    } 
    $('#seconds').html(remainingSeconds); 
    if(remainingSeconds == 0) { 
     //stop calling updateSeconds 
    } 
} 

ことのsetIntervalはまだ(updateSecondsを呼び出し続ける以外何も問題は)ありませんが、それを停止する方法はありますか?

+0

代わりにsetTimeoutを使用することもできます。 – pinichi

答えて

4

はい、あなたはタイマーを停止するclearIntervalを使用することができます:あなたのコードがグローバルスコープにある場合

// Added `var handle`: 
var handle = window.setInterval(updateSeconds, 1000); 
function updateSeconds() { 
    var remainingSeconds = $('#seconds').html() - 1; 
    if(remainingSeconds < 0) { 
     remainingSeconds = 0; 
    } 
    $('#seconds').html(remainingSeconds); 
    if(remainingSeconds == 0) { 
     //stop calling updateSeconds 
     window.clearInterval(handle); // <== added 
     handle = 0;     // <== added 
    } 
} 

、あなたはおそらくhandleと呼ばれる新しいグローバル変数を作成する必要はありません。あなたは、関数内でそれをラップし、すぐに機能を実行することでこれを避けることができます。

(function() { 
    var handle = window.setInterval(updateSeconds, 1000); 
    function updateSeconds() { 
     var remainingSeconds = $('#seconds').html() - 1; 
     if(remainingSeconds < 0) { 
      remainingSeconds = 0; 
     } 
     $('#seconds').html(remainingSeconds); 
     if(remainingSeconds == 0) { 
      //stop calling updateSeconds 
      window.clearInterval(handle); 
      handle = 0; 
     } 
    } 
})(); 

handleupdateSecondsは匿名関数にプライベートです。 (updateSecondsを別の場所から呼び出す必要がある場合は、それを非公開にすることは問題になります)。

しかし、すでに何かの中にいる場合(おそらくイベントハンドラ関数)、あなたはすでにプライベートスコープを持っていますそれを行う必要はありません。

関連する問題