HTML/JavaScript:Timer/Stopwatch不';t复位(停止后) var c1=0; var c2=0; VarC3=0; VarO1=0; var o2=0; var o3=0; ID=window.setTimeout(“start();”,100); 函数start(){ 如果(c1==59){ c1=00;; 如果(c2==59){ c2=00; } 其他c2++; } else-c1++; 如果(c1==0 | | c1==1 | | c1==2 | | c1==3 | | c1==4 | | c1==5 | | c1==6 | c1==7 | c1==8 | c1==9)o1=“0”+c1; 否则o1=c1; 如果(c2==0 | | c2==1 | | c2==2 | | c2==3 | | c2==4 | | c2==5 | | c2==6 | c2==7 | c2==8 | c2==9)o2=“0”+c2; 氧=c2; 如果(c3==0 | c3==1 | c3==2 | c3==3 | c3==4 | c3==5 | c3==6 | c3==7 | c3==8 | c3==9)o3==0+c3; 否则o3=c3; document.forms[0]。元素[0]。值=o3+“:“+o2+”:“+o1; ID=window.setTimeout(“start();”,100); }​ ​

HTML/JavaScript:Timer/Stopwatch不';t复位(停止后) var c1=0; var c2=0; VarC3=0; VarO1=0; var o2=0; var o3=0; ID=window.setTimeout(“start();”,100); 函数start(){ 如果(c1==59){ c1=00;; 如果(c2==59){ c2=00; } 其他c2++; } else-c1++; 如果(c1==0 | | c1==1 | | c1==2 | | c1==3 | | c1==4 | | c1==5 | | c1==6 | c1==7 | c1==8 | c1==9)o1=“0”+c1; 否则o1=c1; 如果(c2==0 | | c2==1 | | c2==2 | | c2==3 | | c2==4 | | c2==5 | | c2==6 | c2==7 | c2==8 | c2==9)o2=“0”+c2; 氧=c2; 如果(c3==0 | c3==1 | c3==2 | c3==3 | c3==4 | c3==5 | c3==6 | c3==7 | c3==8 | c3==9)o3==0+c3; 否则o3=c3; document.forms[0]。元素[0]。值=o3+“:“+o2+”:“+o1; ID=window.setTimeout(“start();”,100); }​ ​,javascript,html,Javascript,Html,状态栏显示错误:对象不支持此操作。 您应该传递函数引用 更改自: <html> <head> <script language="JavaScript"> var c1 = 0; var c2 = 0; var c3 = 0; var o1 = 0; var o2 = 0; var o3 = 0; ID = window.setTimeout("start();", 100); function start() { if (c1 ==

状态栏显示错误:对象不支持此操作。

您应该传递函数引用

更改自:

<html>
    <head>
    <script language="JavaScript">
var c1 = 0;
var c2 = 0;
var c3 = 0;
var o1 = 0;
var o2 = 0;
var o3 = 0;
ID = window.setTimeout("start();", 100);

function start() {
    if (c1 == 59) {
        c1 = 00;;
        if (c2 == 59) {
            c2 = 00;
        }
        else c2++;
    }
    else c1++;

    if (c1 == 0 || c1 == 1 || c1 == 2 || c1 == 3 || c1 == 4 || c1 == 5 || c1 == 6 || c1 == 7 || c1 == 8 || c1 == 9) o1 = "0" + c1;
    else o1 = c1;
    if (c2 == 0 || c2 == 1 || c2 == 2 || c2 == 3 || c2 == 4 || c2 == 5 || c2 == 6 || c2 == 7 || c2 == 8 || c2 == 9) o2 = "0" + c2;
    else o2 = c2;
    if (c3 == 0 || c3 == 1 || c3 == 2 || c3 == 3 || c3 == 4 || c3 == 5 || c3 == 6 || c3 == 7 || c3 == 8 || c3 == 9) o3 = "0" + c3;
    else o3 = c3;

    document.forms[0].elements[0].value = o3 + ":" + o2 + ":" + o1;
    ID = window.setTimeout("start();", 100);
}​
</script>
    </head>
    <body>
        <form name="frm1">
            <input type="text" name="timer1">
            <input type="button" name="but1" value="start" onClick="c1=0; c2=0; c3=0; o1=0; o2=0; 

o3=0; start();">
            <input type=button name="but2" value="stop" onClick="window.clearTimeout(ID);">
        </form>
    </body>
</html>​


请注意,这是一个非常“不吸引人”的代码

如果(c1==0 | | c1==1 | | c1==2 | | c1==3 | | c1==4 | | c1==5 | | c1==6 | | c1==7 | c1==8 | c1==9)

您只需检查边界即可:

ID = window.setTimeout(start, 100);

如果(c1>=0&&c1您在Internet Explorer中遇到错误,因为浏览器本身或JSFIDLE已经在使用变量
start
。在您使用它定义函数后,出于某种原因,它会被更改为包含字符串
“fileopen”
的变量

如果将函数
start
重命名为其他名称,则该函数可以工作:

无论如何,您应该使用间隔而不是超时:

Javascript:

if (c1 >= 0 && c1 <= 9)
    o1="0"+c1;
var c1、c2、c3,ID=null;
startTimer();
函数startTimer(){
如果(ID!=null){
停止计时器();
}
c1=0;
c2=0;
c3=0;
ID=窗口设置间隔(运行,100);
}
函数stopTimer(){
窗口。清除间隔(ID);
ID=null;
}
函数运行(){
c1++;
如果(c1==60){
c1=0;
c2++;
如果(c2==60){
c2=0;
}
}
VarO1=(c1改变这一点

<form name="frm1">
  <input type="text" name="timer1">
  <input type="button" name="but1" value="start" onclick="startTimer();">
  <input type="button" name="but2" value="stop" onclick="stopTimer();">
</form>

对此

<input type="button" name="but1" value="start" onClick="c1=0; c2=0; c3=0; o1=0; o2=0; o3=0; start();">

这是使用jquery完成的,但没有任何库也不会有问题。还解决了双击问题:)


此外,您还可以更改setInterval—仅在计时器工作时调用它,并在计时器停止时清除它。所有这一切都取决于您。

这是怎么回事:`如果(c1==0 | c1==1 | c1==2 | c1==3 | c1==4 | c1==5 | c1==6 | c1==6 | c1==8 | c1==9)`>(c1>=0&&c1@sg3s。是的,我在回答中写到了……糟糕!永远不要将字符串传递给
setInterval()
setTimeout()
。这样做和使用
eval()一样糟糕。)
并且一旦使用变量,就会产生无法读取且可能不安全的代码,因为您需要将变量插入字符串而不是传递实际变量。正确的解决方案是
setInterval(function(){/*your code*)},毫秒);
。这同样适用于
setTimeout()
。如果只想调用一个没有任何参数的函数,也可以直接传递函数名:
setInterval(someFunction,msecs);
(请注意,函数名后面没有
()
)@gdoron,@ThiefMaster;即使在函数名中的字符串之后,这也可以正常工作…?因为
c1
永远不能是负的
if(c1@Juhana.True,但有了这段代码,我什么都不碰…:)伙计们,你们确定你们在“fixed”-fiddles“中的“stop”之后点击了“start”按钮吗?重置在哪里?并且,将其保存在桌面上的单个文件中,IE9抛出错误/警告,“Object不支持此操作”?@popstack。它重置了你们点击“start”的时间再一次。嘿,这是你的代码,不是我的…-1虽然这是真的,但它甚至没有试图解决OP存在的主要问题。这并没有解决问题,它增加了一个问题。在它工作的浏览器中,它将使第二次和第三次计数紧跟在一起,因此它似乎计数1,3,4,而不是1,2,3,4。如果超时是cur,则停止超时租车运行是有道理的,但您仍然要启动两次。不应该以“开始”开始)
<form name="frm1">
  <input type="text" name="timer1">
  <input type="button" name="but1" value="start" onclick="startTimer();">
  <input type="button" name="but2" value="stop" onclick="stopTimer();">
</form>
<input type="button" name="but1" value="start" onClick="c1=0; c2=0; c3=0; o1=0; o2=0; o3=0; start();">
<input type="button" name="but1" value="start" onClick="c1=0; c2=0; c3=0; o1=0; o2=0; o3=0; window.clearTimeout(ID); ID=window.setTimeout('start();',100); start();">