2011-07-31 11 views
1

は私のコードです:ボタンをクリックするたびにsetTimeoutをリセットしますか?ここ

var sec = 10; 
var timer = setInterval(function() {  
    $('#timer span').text(sec--); 
}, 1000); 

これは、10秒間setTimeoutを設定します。私はリセットボタンをクリックして、クリックして、setTimeoutを10秒の遅延でもう一度呼び出すようにしたい。

+0

ですあなたのコード? – Natim

+0

@Natimコードを追加しました – idontknowhow

答えて

6

setTimeout()コールの結果を変数に格納し、ボタンをクリックしたときに格納した結果をclearTimeout()に渡してから、新しいタイムアウトをスケジュールして同じ変数に割り当てます。

少し厄介ですが、実際はとても簡単です。次に例を示します。

http://jsfiddle.net/kzDdq/

+0

グローバル名前空間を汚染する必要はありません。グローバル変数は使用しないでください。 –

+0

@ ime - あなたの例は、グローバル名空間に、私のものと同じだけ多くのものを置きます。グローバルスコープで 'var'を使うと、グローバル変数が作成されます。さらに、この例の目的は、setTimeout() - >いくつかの変数 - > clearTimeout()の流れを実証することです。 – aroth

+0

通常、私の答えは、JavaScriptコードが実行可能ハンドラ(またはロードハンドラ)の中にあるべきことを暗示しています。付属のjsFiddleデモでそのことを実証しています。 –

6

HTML:

<button id="resetButton">Reset</button> 

はJavaScript:

var resetButton = $('#resetButton')[0], 
    timerId; 

function timerExpired() { 
    alert('Timer expired'); 
} 

$(resetButton).click(function() { 
    clearTimeout(timerId); 
    timerId = setTimeout(timerExpired, 10000); 
}).triggerHandler('click'); 

注:このJavaScriptコードがa ready handlerの内側に配置する必要があります。

ライブデモ:http://jsfiddle.net/QkzNj/

は(。あなたが3000(3秒のような小さい値)に遅延を設定することができます - それは簡単にデモをテストするために行います)

0
<div>Div</div> 

var div = document.getElementsByTagName("div")[0]; 

function timedMsg() { 
    console.log("timeout expired."); 
    div.t = setTimeout(timedMsg, 1000);  
} 

timedMsg(); 

div.onclick = function() { 
    clearTimeout(div.t); 
    timedMsg(); 
}; 
+0

私のコードを更新しました – idontknowhow

関連する問題