2013-03-08 144 views
0

我在按鈕點擊定時器時遇到問題。當我點擊按鈕startpause()方法被稱爲那裏我設置啓動計時器和停止計時器。當我正常點擊按鈕(一次點擊後點擊一次),但是當我一再點擊按鈕時,它會很好地工作,計時器開始跳2-3秒。似乎不止一個計時器正在運行..任何人都有任何想法.... ??這裏是我的計時器方法定時器不停止按鈕點擊

function startpause() { 

    if(FLAG_CLICK) { 
     setTimeout(tim,1000);    
     FLAG_CLICK = false; 
    } 
    else { 
     clearTimeout(ti); 
     FLAG_CLICK = true; 
    } 
} 

function tim() { 

    time.innerHTML = t; 
    t = t + 1;  
    ti= setTimeout("tim()", 1000); 
} 

回答

0

試試這個:

// assuming you declared ti and t out here, cuz I hope they're not global 

var t = 0; 
var ti;  
var running = false; 

function startpause() { 

    clearTimeout(ti); 
    if(!running) { 
     ti = setTimeout(tim,1000); 
     running = true; 
    } else { 
     running = false; 
    } 
} 
function tim() { 
    time.innerHTML = t; 
    t = t + 1; 
    ti = setTimeout(tim,1000); 
} 

你可以閱讀更多關於這裏的.setTimeout()https://developer.mozilla.org/en/docs/DOM/window.setTimeout

另外,看到我剛剛創建的的jsfiddle:http://jsfiddle.net/4BMhd/

+0

yuhooo概念的工作。你提供的代碼不起作用。它僅適用於每次啓動點擊計時器。但我添加到ti = setTimeout('tim()',1000);在工作tim()方法..非常感謝你的想法:-) – suja 2013-03-08 07:06:22

+0

對不起,我正在修補它。但有一點是,我建議不要將字符串'tim()'傳遞給'setTimeout()',因爲它會強制函數調用'eval()'函數來解釋該字符串並將其作爲JavaScript執行。如你所知或可能不知道,** eval是EVIL!**(http://stackoverflow.com/questions/86513/why-is-using-the-javascript-eval-function-a-bad-idea) – sweetamylase 2013-03-08 07:10:48

0

您需要在某處存儲setTimeout以便稍後操作。

var myVar; 

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

function myStopFunction() 
{ 
    clearTimeout(myVar); 
} 

裁判http://www.w3schools.com/js/js_timing.asp

0

也許你要改變這樣的:

if(FLAG_CLICK) { 
    setTimeout(tim,1000);    
    FLAG_CLICK = false; 
} 

到:

if(FLAG_CLICK) { 
    tim();    
    FLAG_CLICK = false; 
} 

這似乎爲我的作品通常