Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/429.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 无法清除超时_Javascript_Jquery - Fatal编程技术网

Javascript 无法清除超时

Javascript 无法清除超时,javascript,jquery,Javascript,Jquery,我有以下功能,可在自身上执行设置超时,即: var doIt = function(){ $('#comment_report').trigger('apexrefresh'); setTimeout("doIt()", 5000); } 我的问题是,我试图通过发出以下命令来清除每5秒循环一次的setTimeout: clearTimeout(doIt); 不幸的是,这不起作用 如何清除上面的setTimeout?如果不将字符串传递给clearTimeout,则传递用于标识所述函数返回

我有以下功能,可在自身上执行设置超时,即:

var doIt = function(){
 $('#comment_report').trigger('apexrefresh');
  setTimeout("doIt()", 5000);
}
我的问题是,我试图通过发出以下命令来清除每5秒循环一次的setTimeout:

clearTimeout(doIt);
不幸的是,这不起作用


如何清除上面的setTimeout?

如果不将字符串传递给clearTimeout,则传递用于标识所述函数返回的setTimeout的数字

var timeoutId = null;

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

clearTimeout(timeoutId);

或者,在doIt内部,检查条件是否满足,然后仅在发出另一个setTimeout调用之前返回,这样就不必跟踪id。

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

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

    var timer;

       timer = setTimeout("doIt()", 5000);
然后使用

   if(timer)
      clearTimeout(timer);
setTimeout返回一个id,然后可以传递给clearTimeout函数

var timeoutId = null;

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

clearTimeout(timeoutId);
此外,与此相反:

setTimeout("doIt()", 5000);
setTimeout(doIt, 5000);
您只需传递一个函数:

那你应该用

clearTimeout(myTimeout);
您做得不对clearTimeouttimerid此函数的id为Timeout。 您可以通过以下方式实现此目标:

var mytimerid;

  var doIt = function()
  {
    $('#comment_report').trigger('apexrefresh');
    mytimerid = setTimeout("doIt()", 5000);
  }
然后在需要时,通过

 clearTimeout(mytimerid);

4分钟内回答6个问题。。。你怎么知道你应该用谷歌搜索它…:-谢谢为了记录在案,我确实尝试过这个,但似乎对我不起作用,但现在效果很好-显然错过了一些东西。再次感谢。
 clearTimeout(mytimerid);