javascript中的计时器工作

javascript中的计时器工作,javascript,html,Javascript,Html,在我的项目中,我使用的计时器在单击开始按钮时运行,在单击结束按钮时停止 问题是在双击或多次单击“开始”按钮时出错。额外花费的时间为+1000毫秒,并且开始运行的速度更快。这种情况不应发生 我的javascript是 <script type="text/javascript"> var sec = 0; var min = 0; var hour = 0; function stopwatch(text) { sec++; if (sec == 60) {

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

问题是在双击或多次单击“开始”按钮时出错。额外花费的时间为+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>
。。。。但是它不工作

不要直接调用
stopwatch()

调用其他检查
SD
s状态的程序,然后调用
stopwatch()


var-sec=0;
var min=0;
var小时=0;
var-SD;
函数startStopWatch(){
如果(!SD){
秒表();
}
}
功能秒表(){
sec++;
如果(秒=60){
秒=0;
min=min+1;}
否则{
min=min;}
如果(最小==60){
最小值=0;
小时+=1;}

如果(sec您可以这样做:

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

function f3() {
    clearTimeout(SD);
    SD = false;
    sec = 0;
    min = 0;
    hour = 0;
}
也就是说,当点击按钮时,您可以检查超时是否已经在运行,如果需要,可以取消执行


您可以在更新时进行测试。

@Tommi已经回答了我的问题。谢谢您…它工作正常。我还有一个问题…当按下停止按钮时,计时器停止…然后再次按下启动按钮,计时器从停止值开始启动。计时器不应该正常启动…但我必须保存停止时间(SD)数据库如何将停止时间值从脚本移动到主控制器。@GopalaKrishnan这将是一个完全不同的问题。我建议阅读AJAX,并在遇到任何问题时发布一个新问题。谢谢…工作正常..我还有一个问题…当按下停止按钮时计时器停止…然后再次艺术按钮被按下,计时器从停止值开始。计时器不应该开始。你没有告诉它应该从哪里开始,所以我认为这是默认操作。如果你想再次从
0:0:0
开始,只需在
f3()
中将所有时间变量设置为
0
。它工作正常…但我必须节省停止时间(SD)数据库如何将停止时间的值从脚本移动到主控制器。@GopalaKrishnan好吧,对于原始问题,您有两个可行的答案,请接受其中一个。然后您最好问另一个关于数据库保存的问题,在您的原始问题中,甚至没有提到数据库。。。
<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);
    }
}
var SD;
function stopwatch(text) {
    if (SD && text) {
        return;
    }
            ....
}

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