2009-09-24 6 views
102

のリセット:私は、次のsetTimeoutいる

window.setTimeout(function() { 
    window.location.href = 'file.php'; 
}, 115000); 

どのように私は、.click機能を経由して、カウントダウン介してカウンタを途中でリセットすることができますか?

+0

を設定し、クリアする必要があります。 – zehelvion

答えて

182

そのタイムアウトへの参照を保存し、その参照でclearTimeoutを呼び出すことができます。

// in the example above, assign the result 
var timeoutHandle = window.setTimeout(...); 

// in your click function, call clearTimeout 
window.clearTimeout(timeoutHandle); 

// then call setTimeout again to reset the timer 
timeoutHandle = window.setTimeout(...); 
+1

タイムアウトオブジェクト自体に '.clear()'がないというのは奇妙です。 – Automatico

+9

@ Cort3z 'window.setTimeout'は数値(タイマーのID)を返し、"タイムアウトオブジェクト "を返しないからです。 –

+0

あなたは命の恩人です!どうもありがとうございます!!! – wdanda

17

clearTimeout()とし、setTimeoutの参照をフィードします。これは数値になります。

var initial; 

function invocation() { 
    alert('invoked') 
    initial = window.setTimeout( 
    function() { 
     document.body.style.backgroundColor = 'black' 
    }, 5000); 
} 

invocation(); 

document.body.onclick = function() { 
    alert('stopped') 
    clearTimeout(initial) 
    // re-invoke invocation() 
} 

この例では、5秒後にbody要素をクリックしないと、背景色が黒になります。

参考:

注:のsetTimeoutとてclearTimeoutはECMAScriptのネイティブメソッドではありませんが、JavaScriptのメソッドグローバルウインドウの名前空間の。

4
var myTimer = setTimeout(..., 115000); 
something.click(function() { 
    clearTimeout(myTimer); 
    myTimer = setTimeout(..., 115000); 
}); 

これらの行に何かがあります。

4

あなたはそれをキャンセルし、タイムアウト「タイマー」を覚えておく必要があります、それを再起動します。

g_timer = null; 

$(document).ready(function() { 
    startTimer(); 
}); 

function startTimer() { 
    g_timer = window.setTimeout(function() { 
     window.location.href = 'file.php'; 
    }, 115000); 
} 

function onClick() { 
    clearTimeout(g_timer); 
    startTimer(); 
} 
+0

興味深いことに、このオプションは無視されています。他のすべては、タイマーの内部関数を複製する必要があるようです。これは、2行を維持するコードが2行以上ある場合、乾燥して苦痛になります... – brianlmerritt

1
$(function() { 

    (function(){ 

     var pthis = this; 
     this.mseg = 115000; 
     this.href = 'file.php' 

     this.setTimer = function() { 
      return (window.setTimeout(function() {window.location.href = this.href;}, this.mseg)); 
     }; 
     this.timer = pthis.setTimer(); 

     this.clear = function(ref) { clearTimeout(ref.timer); ref.setTimer(); }; 
     $(window.document).click(function(){pthis.clear.apply(pthis, [pthis])}); 

    })(); 

}); 
2

このタイマーは、30秒後に「こんにちは」alertboxを起動します。ただし、タイマーのリセットボタンをクリックするたびに、timerHandleがクリアされてから再びリセットされます。解雇されると、ゲームは終了します。

<script type="text/javascript"> 
    var timerHandle = setTimeout("alert('Hello')",3000); 
    function resetTimer() { 
     window.clearTimeout(timerHandle); 
     timerHandle = setTimeout("alert('Hello')",3000); 
    } 
</script> 

<body> 
    <button onclick="resetTimer()">Reset Timer</button> 
</body> 
2

タイマーをリセットするには、あなたはおそらく、既存のデバウンスの実装を使用することができますタイマ変数に

$time_out_handle = 0; 
window.clearTimeout($time_out_handle); 
$time_out_handle = window.setTimeout(function(){---}, 60000); 
+15

ああ、私はjavascriptでPHPスタイルの変数名。はい、それは動作しますが、私の神、それは混乱しています。 – psynnott