0

在我的项目中,我使用的计时器在单击开始按钮时运行,并在单击结束时停止

问题是错误地单击开始按钮两次或多次..时间需要+1000毫秒额外并且开始运行更快..这不应该发生

我的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;  }`

....但它不工作

4

2 回答 2

2

不要stopwatch()直接打电话。

调用其他检查SDs 状态的东西,然后调用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

于 2013-07-10T11:25:00.473 回答
0

你可以这样做:

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

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

即,您可以检查单击按钮时超时是否已经运行,并在需要时取消执行。

您可以在更新的jsFiddle对其进行测试。

于 2013-07-10T11:26:50.410 回答