0

このコードスニペットのどこが間違っているのか疑問に思っていました。基本的に、startTime()は1回だけ実行されるので、時計は更新されません。誰かが私がこれを修正する方法をアドバイスできますか?

JS

function startTime(){
  var today=new Date();
  var h=today.getHours();
  var m=today.getMinutes();
  var s=today.getSeconds();
  // add a zero in front of numbers<10
  m=checkTime(m);
  s=checkTime(s);
  document.getElementById('txt').innerHTML=h+":"+m+":"+s;
  t=setTimeout('startTime()',500);
  }

  function checkTime(i){
  if (i<10)
    {
    i="0" + i;
    }
  return i;
  }

HTML

    <body onload="startTime()">

<p>Date</p>
<?php echo date("d/m/y"); ?>

<p>Time</p>
<div id="txt"></div>

リンクhttp://bit.ly/IC9ohX

4

2 に答える 2

5

関数のスコープに問題があるだけです。

短い解決策: 変更

t=setTimeout( 'startTime()',500);

これに。

t = setTimeout( startTime, 500 );

説明:

関数startTimeは関数 for 内で定義され、window.onloadその関数 (およびその中の関数) 内でのみ表示されます。

あなたのコードでは、JavaScript は 500ms 待ってからコードを実行しようとしますstartTime()startTimeグローバル スコープ (の実行スコープ) で関数を検索しますがsetTimeout、参照が見つからないため、エラーが発生し、コードが機能しません。

私のコードは、関数の参照を に渡しstartTimeますsetTimeout。この方法では、エンジンはハンドラーを検索する必要がなく、その時点で失敗することはありません。が呼び出された時点でsetTimeout、 のスコープ内にいるwindow.unloadため、エンジンは関数startTimeを認識し、 に渡されたハンドラに対処できsetTimeoutます。

于 2012-05-07T15:22:12.077 に答える
0

setTimeout指定された時間待機し、ジョブを実行してから停止します。setInterval同じジョブを無期限に繰り返すが必要です。

編集:申し訳ありませんが、あなたのコードを読んでいるときに頭がおかしくなりました。関数の最後で setTimeout を呼び出していることに気づきませんでした。

ただし、setTimeout の代わりに setInterval を使用する有効な使用例がまだあります。関数自体が完了するまでに 2 ミリ秒かかるとします。時計は 0.5 秒ごとに更新されるのではなく、実際には 502 ミリ秒ごとに更新されます。したがって、100 回の反復の後、あるべき場所から 0.2 秒ずれて実行されます。目立たないかもしれませんが、setInterval を 1 秒に設定すると、時計が実際には 1 秒ごとに動いているように見えます。

于 2012-05-07T15:21:53.227 に答える