Mam następujący:Resetowanie setTimeout
window.setTimeout(function() {
window.location.href = 'file.php';
}, 115000);
Jak mogę, za pośrednictwem funkcji .Kliknij wyzerować licznik w połowie przez odliczanie?
Mam następujący:Resetowanie setTimeout
window.setTimeout(function() {
window.location.href = 'file.php';
}, 115000);
Jak mogę, za pośrednictwem funkcji .Kliknij wyzerować licznik w połowie przez odliczanie?
Możesz zapisać odniesienie do tego limitu czasu, a następnie wywołać clearTimeout
dla tego odniesienia.
// 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(...);
Tak dziwne, że nie ma '.clear()' na samym obiekcie timeout. – Automatico
@ Cort3z, ponieważ 'window.setTimeout' zwraca liczbę (identyfikator zegara), a nie" obiekt limitu czasu ". –
Jesteś ratownikiem! Dziękuję bardzo!!! – wdanda
clearTimeout() i podaj referencję setTimeout, która będzie liczbą. Następnie ponownie powołać go:
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()
}
W tym przykładzie, jeśli nie kliknij na elemencie ciała w 5 sekund kolor tła będzie czarny.
referencyjny:
Uwaga: setTimeout i clearTimeout nie są ECMAScript metod rodzimych, ale metody JavaScript światowego okna nazw.
var myTimer = setTimeout(..., 115000);
something.click(function() {
clearTimeout(myTimer);
myTimer = setTimeout(..., 115000);
});
Coś w tym stylu!
Trzeba pamiętać timeout "timera", wyłącz go, a następnie ponownie uruchom go:
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();
}
Ciekawe, że ta opcja została zignorowana. Wszystkie pozostałe zdają się wymagać duplikowania wewnętrznej funkcji timera, co jest mniej niż suche i bolesne, jeśli istnieje więcej niż kilka linii kodu, które trzeba zachować dwukrotnie ... – brianlmerritt
$(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])});
})();
});
Ten czasomierz będzie ogień "Hello" alertbox po 30 sekundach. Jednak za każdym razem, gdy klikniesz przycisk resetowania timera, kasuje on timerHandle, a następnie ponownie ustawia go ponownie. Po uruchomieniu gra się kończy.
<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>
Aby wyzerować stoper, trzeba by ustawić i usunąć timer zmiennej
$time_out_handle = 0;
window.clearTimeout($time_out_handle);
$time_out_handle = window.setTimeout(function(){---}, 60000);
Argh, odradzam używanie nazw zmiennych stylu PHP w javascript . tak, to zadziała, ale mój Boże, to jest mylące. – psynnott
Prawdopodobnie można użyć istniejącej implementacji nieczułości. – zehelvion