clearTimeout如果存在

时间:2011-08-24 14:04:28

标签: javascript

timer_gear仅在我按某个按钮(直到5秒)的情况下才存在。但是可以随时调用另一个函数。在此功能中,我清除计时器并重新启动它。但首先我必须检查对象是否存在,否则我收到此错误: 未捕获的ReferenceError:未定义timer_gear

你可以帮我解决这个问题吗?这些都行不通。

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

if(timer_gear)clearTimeout(timer_gear);

EDIT1: 首先我拼错了我的问题:if(!timer => if(timer。) EDIT2:

完整的代码是:

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

});

结果:

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

谢谢你的回答!

6 个答案:

答案 0 :(得分:51)

您需要做的就是声明timer_gearclearTimeout不是问题所在。引用MDN;将无效ID传递给clearTimeout没有任何影响(并且不会抛出异常)。因此,只需将以下内容添加到代码顶部:

var timer_gear;

不需要其他人建议的所有if。

答案 1 :(得分:6)

如果您只想清除变量timer_gear中保存的计时器(如果存在),您可以

if (timer_gear) clearTimeout(timer_gear);

答案 2 :(得分:5)

第一个应该是:

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

第二个,但是如果未定义timer_gear,则将无效所以您应该使用上面的typeof

if(timer_gear){
  clearTimeout(timer_gear);
}

答案 3 :(得分:0)

if

需要不同的条件
if (typeof(timer_gear) !== "undefined")

或简单地说:

if (timer_gear)

答案 4 :(得分:0)

通常应该有效:

timer_gear = false;
if(timer_gear != false){
    clearTimeout(timer_gear);
}

答案 5 :(得分:0)

if(timer_gear)clearTimeout(timer_gear);

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