2013-07-10 50 views
0

在我的項目,我使用它運行定時器,當啓動按鈕被點擊和最終點擊定時器工作在JavaScript

的問題是由錯誤,當停止時,啓動按鈕被點擊雙重或超過一次..time更多需要+1000 millsec額外的啓動及運行速度更快..this不應該發生

我的JavaScript ..

<script type="text/javascript"> 
var sec = 0; 
var min = 0; 
var hour = 0; 
function stopwatch(text) { 
    sec++; 
    if (sec == 60) { 
     sec = 0; 
     min = min + 1; 
    } else { 
     min = min; 
    } 

    if (min == 60) { 
     min = 0; 
     hour += 1; 
    } 
    if (sec<=9) { sec = "0" + sec; } 
    document.getElementById("starttime").innerHTML = ((hour<=9) ? "0"+hour : hour) + " : " + ((min<=9) ? "0" + min : min) + " : " + sec; 
    SD=window.setTimeout("stopwatch();", 1000); 
} 

function f3() { 
    clearTimeout(SD); 
} 
</script> 
<form name="clock"> 
<div id="starttime" style="font-size:large; "></div> 
<input type="button" name="theButton" id="Start" value="Start" onClick="stopwatch(this.value);" /> 
<input type="button" name="theButton" id="end" value="Stop" onClick="f3();" /> 
</form> 

我已經試過這樣的事情..

if (document.clock.theButton.value == "Start") { 
      window.clearTimeout(SD); 
      return true; }` 

....但它不工作

回答

2

不要直接撥打stopwatch()

呼叫別的東西,檢查SD S狀態,並然後電話stopwatch()

<input type="button" name="theButton" id="Start" value="Start" onClick="startStopWatch();" /> 

var sec = 0; 
var min = 0; 
var hour = 0; 
var SD; 

function startStopWatch(){ 
    if (!SD){ 
     stopwatch(); 
    } 
} 

function stopwatch() { 
    sec++; 
    if (sec == 60) { 
    sec = 0; 
    min = min + 1; } 
    else { 
    min = min; } 
    if (min == 60) { 
    min = 0; 
    hour += 1; } 
if (sec<=9) { sec = "0" + sec; } 
    document.getElementById("starttime").innerHTML = ((hour<=9) ? "0"+hour : hour) + " : " + ((min<=9) ? "0" + min : min) + " : " + sec; 
SD=window.setTimeout(stopwatch, 1000); 
} 

function f3() { 
    if (SD){ 
     clearTimeout(SD); 
    } 
} 

現場演示:http://jsfiddle.net/uJPff/2

+1

因爲'var'關鍵字沒有被使用,是不是已經是全球性的了? – Tommi

+0

@Tommi已回覆我的回答 – Curt

+0

謝謝你...它運轉良好..我還有一個問題...當按下停止按鈕時定時器停止...然後再次按下開始按鈕定時器從停止值開始。計時器不應該啓動 –

0

你可以做這樣的事情:

var SD; 
function stopwatch(text) { 
    if (SD && text) { 
     return; 
    } 
      .... 
} 

function f3() { 
    clearTimeout(SD); 
    SD = false; 
    sec = 0; 
    min = 0; 
    hour = 0; 
} 

即你可以檢查,如果點擊按鈕時超時已經在運行,並且如果需要的話取消執行。

您可以在更新的jsFiddle進行測試。

+0

謝謝你...它運轉良好..我還有一個問題...當按下停止按鈕時定時器停止...然後再次按下開始按鈕定時器從停止值開始計時器不應該啓動 –

+0

您沒有告訴它應該從哪裏開始,所以我認爲這是默認行爲。如果你想再次從'0:0:0'開始,只需在'f3()'中設置所有時間變量爲'0'。 – Teemu

+0

它的工作完美...但我必須將停止時間(SD)保存到數據庫如何我可以從腳本移動到停止時間的值到家庭控制器.. –