[英]javascript clock trouble running timer function?
想知道這段代碼在哪里出問題,基本上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>
您在功能范圍方面只是一個問題。
簡短的解決方案:更改
t=setTimeout( 'startTime()',500);
為此。
t = setTimeout( startTime, 500 );
說明:
函數startTime
是在window.onload
的函數中定義的,並且僅在該函數(及其中的函數)中可見!
在您的代碼中,JavaScript等待500毫秒,然后嘗試執行代碼startTime()
。 它在全局范圍(這是setTimeout
的執行范圍)中搜索函數startTime
,並且找不到任何引用,從而導致錯誤和您的代碼無法正常工作。
我的代碼將函數startTime
的引用傳遞給setTimeout
。 這樣,引擎不必搜索處理程序,也不會在此時失敗。 在調用setTimeout
的時候,您處於window.unload
的范圍內,因此引擎知道函數startTime
並可以處理傳遞給setTimeout
的處理程序。
setTimeout
等待指定的時間,執行其工作,然后停止。 您需要setInterval
,它無限期地重復相同的工作。
編輯:對不起,我在閱讀您的代碼時感到非常沮喪。 沒意識到您在函數末尾調用了setTimeout。
仍然有一個使用setInterval而不是setTimeout的有效用例。 假設您的函數本身需要2毫秒才能完成。 時鍾不是每半秒更新一次,而是實際上每502毫秒更新一次。 因此,經過100次迭代后,它將比原應執行的時間減少0.2秒。 它可能不會引起注意,但是setInterval為1秒會使您的時鍾實際上似乎每秒都在滴答作響。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.