2013-07-10 28 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)保存到数据库如何我可以从脚本移动到停止时间的值到家庭控制器.. –