2

我在停止之前触发的 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'));

这很完美

4

3 回答 3

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;
    };
于 2013-01-09T01:11:06.457 回答
1

创建超时触发函数

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

那么你可以检查是否started=1你可以停止它,如果started=0意味着它已经停止

stopTimeOut(){
started = 0;
clearTimeout(yourFunction);
}
于 2013-01-09T01:08:44.200 回答
1

停止 setTimeout 很容易。

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

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

清除超时

clearTimeout(timeout);
于 2013-01-09T01:18:13.557 回答