想知道我在这段代码中出错了什么,基本上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;
}
Run Code Online (Sandbox Code Playgroud)
HTML
<body onload="startTime()">
<p>Date</p>
<?php echo date("d/m/y"); ?>
<p>Time</p>
<div id="txt"></div>
Run Code Online (Sandbox Code Playgroud)
你的函数范围有问题.
简短解决方案:改变
t=setTimeout( 'startTime()',500);
Run Code Online (Sandbox Code Playgroud)
对此.
t = setTimeout( startTime, 500 );
Run Code Online (Sandbox Code Playgroud)
说明:
该函数startTime在函数中定义window.onload,仅在该函数内可见(及其中的函数)!
在您的代码中,JavaScript等待500毫秒,然后尝试执行代码startTime().它startTime在全局范围内搜索函数(这是执行范围setTimeout)并且找不到任何引用,从而导致错误并且您的代码无法正常工作.
我的代码将函数的引用传递startTime给setTimeout.这样,引擎就不必搜索处理程序,也不会在那时失败.在setTimeout调用的位置,您处于范围内window.unload,因此引擎知道函数startTime并且可以处理传递给的处理程序setTimeout.