2013-07-17 49 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);