2013-07-17 46 views
0

我有以下功能执行的setTimeout回到自身,即:无法清除超时

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

我的问题是,我想明确的是,通过每5秒循环的setTimeout的,通过发行:

clearTimeout(doIt); 

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

有人可以协助我如何去清除上述setTimeout。

谢谢。

+6

6答案停止超时4分钟......你怎么知道你应该已经GOOGLE了它... :-) – Homer6

+0

https://developer.mozilla.org/zh-CN/docs/Web/API/window.clearTimeout –

回答

4

您不传递一个字符串到clearTimeout(),您通过Number它标识setTimeout()(这是由所述函数返回)。

var timeoutId = null; 

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

clearTimeout(timeoutId); 

另外,中doIt()内,检查的条件,如果它满足,那么return只有你才发出另一个调用setTimeout()(你将不必跟踪的ID这样的)。

+0

谢谢。为了记录,我实际上尝试过,但似乎没有为我工作,但现在工作正常 - 显然错过了什么。再次感谢。 – tonyf

0

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

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

var timer; 

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

然后使用

if(timer) 
     clearTimeout(timer); 
1
var doit = function(){ 

}; 

var my_timeout_name = setTimeout(doit, 5000); 

clearTimeout(my_timeout_name); 
1

setTimeout回报你的ID,然后可以传递给clearTimeout功能。

此外,而不是这样的:

setTimeout("doIt()", 5000); 

你可以只传递一个函数:

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

那么你应该使用

clearTimeout(myTimeout); 
1

你做错了clearTimeout(timerid)这个功能tak es超时的ID。 你可以做到这一点作为

var mytimerid; 

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

越看越需要时由

clearTimeout(mytimerid);