Resetting a setTimeout

JavascriptJquery

Javascript Problem Overview


I have the following:

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

How can I, via a .click function, reset the counter midway through the countdown?

Javascript Solutions


Solution 1 - Javascript

You can store a reference to that timeout, and then call clearTimeout on that reference.

// 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(...);

Solution 2 - Javascript

clearTimeout() and feed the reference of the setTimeout, which will be a number. Then re-invoke it:

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()
}

In this example, if you don't click on the body element in 5 seconds the background color will be black.

Reference:

Note: setTimeout and clearTimeout are not ECMAScript native methods, but Javascript methods of the global window namespace.

Solution 3 - Javascript

You will have to remember the timeout "Timer", cancel it, then restart it:

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();
}

Solution 4 - Javascript

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

Something along those lines!

Solution 5 - Javascript

For NodeJS it's super simple:

const timeout = setTimeout(...);

timeout.refresh();

From the docs:

> timeout.refresh() > >Sets the timer's start time to the current time, and reschedules the timer to call its callback at the previously specified duration adjusted to the current time. This is useful for refreshing a timer without allocating a new JavaScript object.

But it won't work in JavaScript because in browser setTimeout() returns a number, not an object.

Solution 6 - Javascript

This timer will fire a "Hello" alertbox after 30 seconds. However, everytime you click the reset timer button it clears the timerHandle then re-sets it again. Once it's fired, the game ends.

<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>

Solution 7 - Javascript

var redirectionDelay;
function startRedirectionDelay(){
	redirectionDelay = setTimeout(redirect, 115000);
}
function resetRedirectionDelay(){
	clearTimeout(redirectionDelay);
}

function redirect(){
	location.href = 'file.php';
}

// in your click >> fire those
resetRedirectionDelay();
startRedirectionDelay();

here is an elaborated example for what's really going on http://jsfiddle.net/ppjrnd2L/

Solution 8 - Javascript

i know this is an old thread but i came up with this today

var timer 		= []; //creates a empty array called timer to store timer instances
var afterTimer = function(timerName, interval, callback){
	window.clearTimeout(timer[timerName]); //clear the named timer if exists
	timer[timerName] = window.setTimeout(function(){ //creates a new named timer 
		callback(); //executes your callback code after timer finished
	},interval); //sets the timer timer
}

and you invoke using

afterTimer('<timername>string', <interval in milliseconds>int, function(){
   your code here
});

Solution 9 - Javascript

$(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])} );
	
	})();
	
});

Solution 10 - Javascript

To reset the timer, you would need to set and clear out the timer variable

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

Attributions

All content for this solution is sourced from the original question on Stackoverflow.

The content on this page is licensed under the Attribution-ShareAlike 4.0 International (CC BY-SA 4.0) license.

Content TypeOriginal AuthorOriginal Content on Stackoverflow
QuestionJasonView Question on Stackoverflow
Solution 1 - JavascriptbdukesView Answer on Stackoverflow
Solution 2 - Javascriptmeder omuralievView Answer on Stackoverflow
Solution 3 - JavascriptFrank KruegerView Answer on Stackoverflow
Solution 4 - JavascriptDeniz DoganView Answer on Stackoverflow
Solution 5 - JavascriptStalinkoView Answer on Stackoverflow
Solution 6 - JavascriptkaleazyView Answer on Stackoverflow
Solution 7 - JavascriptBiskrem MuhammadView Answer on Stackoverflow
Solution 8 - JavascriptClintView Answer on Stackoverflow
Solution 9 - Javascriptandres descalzoView Answer on Stackoverflow
Solution 10 - JavascriptAnwasi Richard ChibuezeView Answer on Stackoverflow