簡體   English   中英

javascript時鍾運行計時器功能出現問題?

[英]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>

鏈接http://bit.ly/IC9ohX

您在功能范圍方面只是一個問題。

簡短的解決方案:更改

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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM