如何确定setTimeout是否在后台运行

时间:2013-01-09 01:00:43

标签: javascript settimeout

我遇到了阻止先前触发的setTimeout函数的问题。

我发现了一些相关问题,给出解决方案是将time_out变量放在函数之外以使其工作。我试过但仍然没有工作。

   this.A = function(){
        if(time_out) clearTimeout(time_out);  
        // time_out is nothing here and this will return error

        time_out = setTimeout(function(){  }, 3000);
    }

    -------------------------------------------------

     this.time_out = 0;
     this.A = function(){
          if(this.time_out) clearTimeout(this.time_out);  
          //will run through, but the setTimeout setup previously will keep running...

         this.time_out = setTimeout(function(){  }, 3000);
     }

更新

我累了把整个函数放到一个元素中并在重置时调用它

if(el.data('time_out')) clearTimeout(el.data('time_out'));

这很完美

3 个答案:

答案 0 :(得分:2)

确保你在适当的范围内。

var timerFun = function(){
     var me = this;
     me.timer= undefined;

     me.startTimeout = function(){
        me.timer = setTimeout(me.SetterFunc, 3000);
     };

     me.setterFunc = function(){
        alert('oh hai!');
        me.ClearTimer();
     };

     me.clearTimer = function(){
        if(me.timer!= undefined){
            me.clearTimeout(me.timer);
        }
     };
     return me;
    };

答案 1 :(得分:2)

停止setTimeout非常容易。

var timeout = setTimeout(function(){
    myFunc();
}, 1000);

function myFunc(){
    //do something...
};

清除超时

clearTimeout(timeout);

答案 2 :(得分:1)

为超时创建触发器功能

startTimeOut(){
started = 1;
setTimeout(yourFunction, 2000);
}

然后你可以检查是否启动= 1你可以停止它,如果启动= 0则意味着它已停止

stopTimeOut(){
started = 0;
clearTimeout(yourFunction);
}