2014-03-30 54 views
-2

我試圖重新在JavaScript中的計時器,但拒絕工作,它只是啓動另一個功能不停止前一個。的JavaScript的setTimeout重置不工作

time = ((A[Qused].length)*5000) + 10000 
refresh = window.setTimeout(function(){timeup(tc,chosen);}, time); 
window.clearTimeout(refresh) 
refresh = window.setTimeout(function(){timeup(tc,chosen);}, time); 

此代碼是直接從應用程序,因爲我解釋它不會停止timout,它開始另一個雖然。

任何人都可以幫忙嗎? 日Thnx提前

+2

你怎麼能知道第一定時器不復位? – Teemu

+2

[簡單測試](http://jsfiddle.net/Y7BgA/)顯示它應該工作。 –

+1

沒有什麼錯四大行你在這裏的代碼,所以我的猜測是,這實際上不是你的代碼是什麼樣子。如果你需要幫助,你將不得不向我們展示更多的ACTUAL代碼。 – jfriend00

回答

1

你不告訴我們很多在現實的語境你的代碼,但有些不順利清除前次的計時的常見原因有:

  1. 你的變量保存計時器不是一個全局變量(或在持續閉合),因此不下去,從一個調用到下一個,所以當你去做clearTimeout(refresh),該refresh變量不按住右值。你可以做一個console.log(refresh)你做clearTimeout()前檢查。如果這是你的問題,那麼refresh可能是undefined

  2. 您意外啓動了多個計時器,因此您將覆蓋變量refresh,並且您的clearTimeout(refresh)只會停止最後一個計時器設置,而不是最早的計時器。在某些形式的代碼,這是最安全的,始終做clearTimeout()上任何事先計時器之前,你開始一個新的計時器,以確保你不已經有一個正在運行的或可能更有意義,只是一個if語句檢查,如果你已經有了一個跑步。

如果你想更具體的幫助,你將需要披露的實際代碼的詳細信息,因爲四行代碼,你在精確序列具有上面都在同一範圍內沒有你的問題正在經歷 - 顯然,實際代碼比您所透露的要多。

+1

如果它的確切順序如圖所示,直接從碼(之間沒有其它代碼)複製,既不似乎可能。我的猜測是OP是錯誤的。 –

+0

你的答案是有用的(但猜測),但記得closevote以及;-) –

+0

這兩個似乎很可能,謝謝你生病嘗試修復 –

0

例如如何清除setTimeout的

var myVar; 

function myFunction() 
{ 
    myVar = setTimeout(function(){alert("Hello")},3000); 
} 

function myStopFunction() 
{ 
    clearTimeout(myVar); 
}