0
<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>​

ここでライブデモ

ステータスバーにエラーが表示されます:オブジェクトはこのアクションをサポートしていません。

4

4 に答える 4

1

フィドルを修正

関数参照を渡す必要があります。

から変更されました:

ID = window.setTimeout("start();", 100);

ID = window.setTimeout(start, 100);

これは非常に「魅力的でない」コードであることに注意してください...

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

境界を確認するだけです。

if (c1 >= 0 && c1 <= 9)
    o1="0"+c1;
于 2012-04-22T10:22:34.290 に答える
1

startブラウザ自体またはjsFiddleのいずれかによってすでに変数が使用されているため、InternetExplorerでエラーが発生します。関数を定義するためにそれを使用した後、それは何らかの理由で文字列を含む変数に変更されます"fileopen"

関数の名前を別の名前に変更すると、次のように機能startします。

http://jsfiddle.net/Guffa/yqsmy/

とにかく、これにはタイムアウトではなく間隔を使用する必要があります。

Javascript:

var c1, c2, c3, ID = null;
startTimer();

function startTimer() {
    if (ID != null) {
        stopTimer();
    }
    c1 = 0;
    c2 = 0;
    c3 = 0;
    ID = window.setInterval(run, 100);
}

function stopTimer() {
    window.clearInterval(ID);
    ID = null;
}

function run() {
    c1++;
    if (c1 == 60) {
        c1 = 0;
        c2++;
        if (c2 == 60) {
            c2 = 0;
        }
    }

    var o1 = (c1 <= 9 ? "0" : "")  + c1;
    var o2 = (c2 <= 9 ? "0" : "")  + c2;
    var o3 = (c3 <= 9 ? "0" : "")  + c3;
    document.forms[0].elements[0].value = o3 + ":" + o2 + ":" + o1;
}

HTML:

<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>

デモ: http: //jsfiddle.net/Guffa/B4a54/7/

タイマーを正確にしたい場合は、開始時刻を変数に保存し、それを現在の時刻から減算して経過時間を取得し、間隔のみを使用して経過時間を表示する必要があります。

于 2012-04-22T10:45:50.060 に答える
0

これが改善されたタイマーの例です

これはjqueryを使用して行われていますが、ライブラリがなくても同じように記述しても問題ありません。ダブルスタートクリックの問題も解決しました:)

また、setIntervalを変更することもできます。タイマーが機能しているときにのみ呼び出し、タイマーが停止したときにクリアします。それはすべてあなた次第です。

于 2012-04-22T12:27:15.923 に答える
0

これを変える

<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();">
于 2012-04-22T10:49:41.790 に答える