Cancel/kill window.setTimeout() before it happens
var timer1 = setTimeout(function() { removeStatusIndicator(); }, statusTimeout);
clearTimeout(timer1)
How to cancel setTimeout action after it has been triggered?
Use clearTimeout()
to cancel the timeout:
const ticker = setTimeout(function() {
$('#colorboxpopupform').click();
}, 30000);
Call clearTimeout(ticker)
when needed.Documentation.
How can I cancel setTimeout?
setTimeout
returns a numeric timeoutId
for your timer. You can pass that to the clearTimeout
method.
$(function () {
var t = window.setTimeout(function () {
$(".alert").fadeTo(700).slideUp(700, function () {
$(this).hide();
});
}, 5000);
$("#yourHideButtonId").on("click", function () {
if(t!=null)
{
clearTimeout(t);
}
});
});
end a setTimeout function before its set time
The setTimeout
function returns an identifier to that timeout. You can then cancel that timeout with the clearTimeout
function. So you can do something like this (fill in the blanks with your code):
var timer;
$(function() {
$(...).click(function() {
...
timer = setTimeout(...);
...
});
$(...).click(function() {
clearTimeout(timer);
});
});
It's not particularly super clean to keep a global variable for this, however. You could store the timer in the data
attribute of whatever element makes the most sense for your situation. Something like this:$(function() {
$(...).click(function() {
...
var timer = setTimeout(...);
$(someelement).data('activetimer', timer);
...
});
$(...).click(function() {
var timer = $(someelement).data('activetimer');
if(timer) {
clearTimeout(timer);
$(someelement).removeData('activetimer');
}
});
});
It doesn't really look cleaner, but it's an alternative way to store the timer... How to clear all running timeouts before setting a new timeout
Even i had the same kind of problem. Try this
// Start listening on click.
var timeoutHandle;
var active= false;
var $mic = $("#mic-container");
$mic.click(function(event){
//event.preventDefault();
if(active)
annyang.abort();
else
annyang.start({ autoRestart: false, continuous: false});
});
annyang.addCallback('start', function () {
active = true; console.log(active);
$mic.addClass('active pulse');
window.clearTimeout(timeoutHandle);
timeoutHandle = setTimeout(annyang.abort, 5000);
});
annyang.addCallback('end', function () {
window.clearTimeout(timeoutHandle);
timeoutHandle = setTimeout(function () {$mic.removeClass("active pulse result-match result-no-match");}, 200);
active=false; console.log(active);
});
annyang.addCallback('resultNoMatch', function () {
$mic.addClass("result-no-match");
$('.myErrorText').html('Try saying a valid command. See <a href="help.html" data-ajax="false">help</a> section for a list of valid commands!');
});
annyang.addCallback('resultMatch', function () {
$('.myErrorText').text('');
$mic.addClass("result-match");
});
javascript stopping a repeating setTimeout function
Don't need to use setInterval
, as suggested by K Ф, But you do need to clear the timeout with clearTimeout
. Make sure you store a reference to your timeout object:
timeout = setTimeout(/* arguments */);
And add a reset function and use it when resetting:function reset () {
if(timeout)
clearTimeout(timeout);
time = 1500;
}
Here's your Pen updated. setTimeout / clearTimeout problems
You need to declare timer
outside the function. Otherwise, you get a brand new variable on each function invocation.
var timer;
function endAndStartTimer() {
window.clearTimeout(timer);
//var millisecBeforeRedirect = 10000;
timer = window.setTimeout(function(){alert('Hello!');},10000);
}
Cancelling an event being delayed
I'd suggest assigning setTimeout
to a variable (with proper scope accessibility) and using clearTimeout
to stop the timeout.
To read more about setTimeout and clearTimeout.
An example would look like:
var myTimeout;
$('#ReportList').change(function () {
if (myTimeout) clearTimeout(myTimeout);
myTimeout = setTimeout(function () { PopulateYearsDropdownList() }, 2000);
});
How to kill a javascript setTimeout loop
You can use clearTimeout
(documentation)
var timeout;
function countdown(counter) {
x = counter;
if (x > 0) {
x--;
alert(x + "/5");
if (x > 0) {
timeout = setTimeout(function () {
countdown(x);
}, 2000);
}
}
};
$('input').click(function() {
clearTimeout(timeout);
countdown(6);
});
countdown(6);
Fiddle
Related Topics
Removing Duplicate Objects with Underscore for JavaScript
JavaScript Request Fullscreen Is Unreliable
Why Are Exceptions Used for Rejecting Promises in Js
Regular Expression for Url Validation (In JavaScript)
Render Object Properties in React
What's "This" in JavaScript Onclick
Jquery Convert Line Breaks to Br (Nl2Br Equivalent)
Why Does Console.Log Say Undefined, and Then the Correct Value
Rotate Object on Specific Axis Anywhere in Three.Js - Including Outside of Mesh
How to Use Local Storage in Angular
Why Do I Need to Copy an Array to Use a Method on It
Angularjs Browser Autofill Workaround by Using a Directive
Passing Data to a Jquery UI Dialog
Why and When to Use Default Export Over Named Exports in Es6 Modules