clearTimeout if exists

Asked by At

timer_gear exist only in case if I press some button (until 5 sec). But there is another function it can be called any time. In this function I clear the timer and restart it. But first I have to check if the object exists otherwise I get this error: Uncaught ReferenceError: timer_gear is not defined

Could you help me to solve this? These does not work.

if(timer_gear!="undefined")clearTimeout(timer_gear);

if(timer_gear)clearTimeout(timer_gear);

EDIT1: first I misspelled my question: if(!timer => if(timer EDIT2:

the full code is:

function hide_gear(){
    $('#gear_div').animate({opacity: 0}, 1000);
    delete timer_gear; //EDIT3: destroy object
}

...

/*gear*/
$('#gear').click(function(){
    $('#gear_div').animate({
        opacity: 1,
      }, 1000, function() {
        timer_gear = setTimeout("hide_gear();",5000);
      });
});
$('#gear').mousemove(function(){
    if( ? ? ? )
    {
        clearTimeout(timer_gear);
        timer_gear = setTimeout("hide_gear();",5000);
    }

});

Results:

timer_gear// Uncaught ReferenceError timer_gear is not defined
timer_gear != undefined // Uncaught ReferenceError: timer_gear is not defined
typeof timer_gear !== "undefined" // WORKS
typeof timer_gear != "undefined" // WORKS, just tired it
var timer_gear; //at the begining - WORKS, but I did not wanted a new variable if its not necessary

thank you for answers!

6 Answers

5
Rocket Hazmat On Best Solutions

The 1st one should be:

if(typeof timer_gear !== "undefined"){
  clearTimeout(timer_gear);
}

And the 2nd, but this won't work if timer_gear is not defined, so you should use the typeof one above:

if(timer_gear){
  clearTimeout(timer_gear);
}
6
Alex Turpin On

If you only want to clear the timer held in the variable timer_gear if it exists, you can do

if (timer_gear) clearTimeout(timer_gear);
0
Xion On

You need a different condition on your if:

if (typeof(timer_gear) !== "undefined")

or simply:

if (timer_gear)
0
David Laberge On

Normally that should work:

timer_gear = false;
if(timer_gear != false){
    clearTimeout(timer_gear);
}
0
Nivas On
if(timer_gear)clearTimeout(timer_gear);

or

if(timer_gear != undefined)clearTimeout(timer_gear);
50
Gerben On

All you need to do is declare timer_gear. clearTimeout is not the problem here. To quote the MDN; Passing an invalid ID to clearTimeout does not have any effect (and doesn't throw an exception). So just add the following to the top of your code:

var timer_gear;

No need for all the if's that everyone else is suggesting.