想知道我在这段代码中出错的地方,基本上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>
答案 0 :(得分:5)
您的功能范围确实存在问题。
简短解决方案:改变
t=setTimeout( 'startTime()',500);
到此。
t = setTimeout( startTime, 500 );
说明:
函数startTime
在window.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会使你的时钟实际上每秒都会出现,就像它应该的那样。