无法清除超时

时间:2013-07-17 06:33:22

标签: javascript jquery

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

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

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

clearTimeout(doIt);

不幸的是,这不起作用。

我如何清除上面的setTimeout?

6 个答案:

答案 0 :(得分:4)

您不会将字符串传递给clearTimeout(),而是传递标识Number的{​​{1}}(由所述函数返回)。

setTimeout()

或者,在var timeoutId = null; var doIt = function() { $('#comment_report').trigger('apexrefresh'); timeoutId = setTimeout(doIt, 5000); }; clearTimeout(timeoutId); 内,检查条件以及是否符合条件,然后doIt()仅在您再次拨打return之前调用setTimeout()(您无需跟踪id那样)。

答案 1 :(得分:1)

var doit = function(){

};

var my_timeout_name = setTimeout( doit, 5000 );

clearTimeout( my_timeout_name );

答案 2 :(得分:1)

setTimeout会返回一个您可以传递给clearTimeout函数的ID。

此外,而不是:

setTimeout("doIt()", 5000);

你可以传递一个功能:

setTimeout(doIt, 5000);

答案 3 :(得分:1)

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

然后你应该使用

clearTimeout(myTimeout);

答案 4 :(得分:1)

你做错了clearTimeout(timerid)这个函数取了Timeout的id。 你可以实现这个目标

var mytimerid;

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

然后在需要时通过

停止超时
 clearTimeout(mytimerid);

答案 5 :(得分:0)

您需要为包含id

的setTimeout指定一个变量

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

    var timer;

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

然后使用

   if(timer)
      clearTimeout(timer);