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 に答える