无法清除超时

Unable to Clear Timeout

本文关键字:超时 清除      更新时间:2023-09-26

我有以下函数,它在自己身上执行setTimeout,即:

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

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

clearTimeout(doIt);

不幸的是,这并没有奏效。

如何清除上面的setTimeout?

您不向clearTimeout()传递字符串,而是传递标识setTimeout()Number(由所述函数返回)。

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

或者,在doIt()内部,检查条件,如果满足,则仅在向setTimeout()发出另一个调用之前检查return(这样就不必跟踪id)。

var doit = function(){
};
var my_timeout_name = setTimeout( doit, 5000 );
clearTimeout( my_timeout_name );

setTimeout返回一个id,然后可以将其传递给clearTimeout函数。

此外,取而代之的是:

setTimeout("doIt()", 5000);

你只需要传递一个函数:

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

那么你应该使用

clearTimeout(myTimeout);

你做得不对clearTimeout(timerid)这个函数的id为Timeout。你可以作为实现这一点

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

然后在需要时通过停止超时

 clearTimeout(mytimerid);

您需要为保存id的setTimeout分配一个变量。

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

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

然后使用

   if(timer)
      clearTimeout(timer);