0

我有以下函数对自身执行 setTimeout,即:

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

我的问题是,我试图通过发出以下命令来清除每 5 秒循环一次的 setTimeout:

clearTimeout(doIt);

不幸的是,这没有用。

我将如何清除上述 setTimeout?

4

6 回答 6

4

您没有将字符串传递给clearTimeout(),而是传递了Numberwhich 标识setTimeout()(由所述函数返回)。

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
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 回答
1

你做错了clearTimeout(timerid)这个函数需要超时的ID。你可以做到这一点

var mytimerid;

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

然后在需要时停止超时

 clearTimeout(mytimerid);
于 2013-07-17T06:38:13.953 回答
0

您需要将一个变量分配给包含id.

但是在您的代码中,您似乎正在分配doIt一个不返回任何内容的函数。

    var timer;

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

然后使用

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