Сброс setTimeout при каждом нажатии кнопки? - PullRequest
1 голос
/ 31 июля 2011

Вот мой код:

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

Устанавливает setTimeout на 10 секунд. Я хочу иметь кнопку сброса, которая при нажатии снова вызывает setTimeout с 10-секундной задержкой.

Ответы [ 3 ]

6 голосов
/ 31 июля 2011

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 должен быть помещен в готовый обработчик .

Демонстрация в реальном времени: http://jsfiddle.net/QkzNj/

(можно установить меньшее значение задержки, например 3000 (3 секунды) - это упростит тестированиедемо.)

6 голосов
/ 31 июля 2011

Это можно сделать, сохранив результат вашего вызова setTimeout() в некоторой переменной, а затем передав результат, который вы сохранили, в clearTimeout() при нажатии кнопки, прежде чем планировать новый тайм-аут и назначить его обратнота же переменная.

Звучит немного сложно, но на самом деле все очень просто.Вот пример:

http://jsfiddle.net/kzDdq/

0 голосов
/ 31 июля 2011
<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();
};
...