2014-12-13 57 views
-1

以下是我的javascript代碼。我試圖讓我的函數timedisplay()每秒觸發一次。 但它不是hapenning所以..無法在javascript中使用settimeout遞歸調用函數

function timedisplay() { 
 
    alert ("Welcome"); 
 
    var pelement = document.getElementById("myclock"); 
 
    var timeobj = new Date(); 
 
    alert (timeobj); 
 
    pelement.innerHTML = timeobj.toLocaleTimeString(); 
 
    alert (pelement.toLocaleTimeString()); 
 
    settimeout (timedisplay,1000); 
 
}
Timer Clock Testing.. 
 
<button onclick="timedisplay()">Click me</button> 
 
<p id="myclock"></p>

問題是什麼?

+1

請注意,你有一個錯字;它應該是「定時器時鐘」。 – 2014-12-13 07:56:19

+0

我在體內試過,還是一樣的問題。 – DrunkenMaster 2014-12-13 07:59:33

+1

您可能需要正確拼寫'settimeout'。 – 2014-12-13 08:53:20

回答

2

P成分元素沒有toLocaleTimeString()函數,它引用元素myclock 的setTimeout應該去的setTimeout

否則你的JavaScript是好的:

alert (pelement.toLocaleTimeString()); 

function timedisplay() 
 
{ 
 
//alert ("Welcome"); 
 
var pelement = document.getElementById("myclock"); 
 
var timeobj = new Date(); 
 
//alert (timeobj); 
 
pelement.innerHTML = timeobj.toLocaleTimeString(); 
 
//alert (pelement.toLocaleTimeString()); 
 
setTimeout (timedisplay,1000); 
 

 
}
Timer Cock Testing.. 
 
    <button onclick="timedisplay()">Click me</button> 
 
    <p id="myclock"> 
 
    </p>

+0

這對解釋會更有幫助。 – 2014-12-13 07:55:08

+0

@EdCottrell解釋是在路上 – 2014-12-13 07:58:48

+0

我試過了,但它在這個「運行代碼片段」中起作用,但它在瀏覽器中不起作用。 :( – DrunkenMaster 2014-12-13 08:32:07

1

對於首先,它是setTimeout,而不是settimeout - 大寫事宜。

二,不要做遞歸;幾乎沒有理由想要這樣的遞歸超時。要重複此操作,請改用setInterval,並將其放入正文或其他功能中。

也就是說,如果您修復了setTimeout中的錯字,您的代碼看起來會好的。

+0

做,我們有任何缺點使用這種遞歸機制,而不是setInterval?。stack overflow問題類似 – DrunkenMaster 2014-12-13 08:37:06

+0

是的;在這個例子中遇到遞歸問題要容易得多,最好使用'setInterval',但只有在用戶第一次點擊按鈕時纔會這樣做,否則,您最終可能會有多次遞歸(基於多次點擊),導致糟糕的用戶體驗甚至崩潰。 – 2014-12-13 14:17:45

5

你可能會考慮調用setInterval函數而不是setTimeout,你只需要調用它一次。雖然技術上允許的setInterval在你的回調,這是更好的把它放在一個單獨的功能,如下所示:

/* the callback */ 
function refreshTime() { 
    var pelement = document.getElementById("myclock"); 
    var timeobj = new Date(); 
    pelement.innerHTML = timeobj.toLocaleTimeString(); 
} 

/* start the clock */ 
function timedisplay() { 
    setInterval(refreshTime, 1000); 
}