2012-05-07 3 views
0

Интересно, где я ошибаюсь в этом фрагменте кода, в основном startTime() запускается только один раз, и это так, что часы не обновляют. Может ли кто-нибудь посоветовать, как я могу это исправить?javascript часы проблема работа таймер функция?

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

ответ

5

У вас возникли проблемы с определением ваших функций.

Краткое решение: Изменить

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

к этому.

t = setTimeout(startTime, 500); 

Объяснение:

Функция startTime определяется в функции для window.onload и виден только в пределах этой функции (и функции в ней)!

В вашем коде JavaScript ждет 500 мс, а затем пытается выполнить код startTime(). Он выполняет поиск функции startTime в глобальной области (которая является областью выполнения setTimeout) и не может найти никакой ссылки, что приведет к ошибке, и ваш код не работает.

Мой код передает ссылку на функцию startTime на номер setTimeout. Таким образом, движок не должен искать обработчик и не может потерпеть неудачу в этот момент. В точке, где вызывается setTimeout, вы находитесь в области window.unload, поэтому двигатель знает о функции startTime и может справиться с обработчиком, переданным по setTimeout.

0

setTimeout ждет определенное количество времени, делает свою работу, а затем останавливается. Вы хотите setInterval, который повторяет ту же работу на неопределенный срок.

EDIT: Извините, я мысленно прочитал ваш код. Не понял, что вы вызываете setTimeout в конце функции.

Тем не менее, для использования setInterval вместо setTimeout все же существует допустимый прецедент. Предположим, что ваша функция занимает 2 миллисекунды. Вместо того, чтобы обновлять каждые полсекунды, ваши часы фактически обновляются каждые 502 миллисекунды. Таким образом, после 100 итераций, он будет выполнять .2 секунды от того, где это должно быть. Вероятно, это не заметно, но setInterval, равный 1 секунде, заставит ваши часы, по-видимому, галочками каждую секунду, как и должно быть.

Смежные вопросы