javascript clock故障运行计时器功能?

时间:2012-05-07 15:15:21

标签: javascript

想知道我在这段代码中出错的地方,基本上startTime()只运行一次就可以了,所以时钟不会更新。任何人都可以建议我如何解决这个问题?

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

2 个答案:

答案 0 :(得分:5)

您的功能范围确实存在问题。

简短解决方案:改变

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

到此。

t = setTimeout( startTime, 500 );

说明:

函数startTimewindow.onload的函数中定义,只在该函数中可见(及其中的函数)!

在您的代码中,JavaScript等待500毫秒,然后尝试执行代码startTime()。它在全局范围内搜索函数startTime(这是setTimeout的执行范围)并且找不到任何引用,从而导致错误并且您的代码无法正常工作。

我的代码将函数startTime的引用传递给setTimeout。这样,引擎就不必搜索处理程序,也不会在那时失败。在调用setTimeout的位置,您处于window.unload的范围内,因此引擎知道函数startTime并且可以处理传递给setTimeout的处理程序。

答案 1 :(得分:0)

setTimeout等待指定的时间,完成工作,然后停止。 你想要setInterval,它无限期地重复同样的工作。

编辑:对不起,我在读你的代码时脑力激动。没意识到你在函数结束时调用了setTimeout。

虽然使用setInterval而不是setTimeout仍然有一个有效的用例。假设您的函数本身需要2毫秒才能完成。您的时钟实际上每隔502毫秒更新一次,而不是每半秒更新一次。因此,在100次迭代之后,它将从应该的位置执行.2秒。它可能并不明显,但是1秒的setInterval会使你的时钟实际上每秒都会出现,就像它应该的那样。