0

setTimeout を実行する次の関数があります。つまり、次のとおりです。

var doIt = function(){
 $('#comment_report').trigger('apexrefresh');
  setTimeout("doIt()", 5000);
}

私の質問は、次を発行して、5 秒ごとにループしている setTimeout をクリアしようとしていることです。

clearTimeout(doIt);

残念ながら、これはうまくいきませんでした。

上記の setTimeout をクリアするにはどうすればよいですか?

4

6 に答える 6

4

に文字列を渡すのではなく、 (関数によって返される)を識別するclearTimeout()を渡します。NumbersetTimeout()

var timeoutId = null;

var doIt = function() {
    $('#comment_report').trigger('apexrefresh');
    timeoutId = setTimeout(doIt, 5000);
};

clearTimeout(timeoutId);

または、 の内部でdoIt()条件を確認し、条件が満たされている場合は、return別の呼び出しを発行する前にのみ行いますsetTimeout()(そのように ID を追跡する必要はありません)。

于 2013-07-17T06:35:51.470 に答える
1

clearTimeout(timerid)この関数は Timeout の ID を取ります。あなたはこれを達成することができます

var mytimerid;

  var doIt = function()
  {
    $('#comment_report').trigger('apexrefresh');
    mytimerid = setTimeout("doIt()", 5000);
  }

そして、必要に応じてタイムアウトを停止します

 clearTimeout(mytimerid);
于 2013-07-17T06:38:13.953 に答える
1
var doit = function(){

};

var my_timeout_name = setTimeout( doit, 5000 );

clearTimeout( my_timeout_name );
于 2013-07-17T06:36:28.607 に答える
1

setTimeout関数に渡すことができるIDを返しますclearTimeout

また、これの代わりに:

setTimeout("doIt()", 5000);

関数を渡すだけです:

setTimeout(doIt, 5000);
于 2013-07-17T06:36:29.153 に答える
1
var myTimeout = false;
var doIt = function(){
 $('#comment_report').trigger('apexrefresh');
 myTimeout = setTimeout(doIt, 5000);
}

次に、使用する必要があります

clearTimeout(myTimeout);
于 2013-07-17T06:36:59.607 に答える
0

を保持する setTimeout に変数を割り当てる必要がありますid

しかし、あなたのコードでは、doIt何も返さない関数に割り当てているようです。

    var timer;

       timer = setTimeout("doIt()", 5000);

次に使用します

   if(timer)
      clearTimeout(timer);
于 2013-07-17T06:36:11.573 に答える