2010-09-04 36 views
2

這是previous question I asked yesterday的延續。Stuck試圖找出如何使用setInterval正確使用此JQuery腳本

我試圖顯示一個基於預定時間值的時鐘..不是當前客戶端時間。

,這裏是我的JQuery ......

$(document).ready(function() { 
    var currentTime = new Date('3/09/2010 9:27:29 PM'); 
    setInterval("DisplayTime(currentTime, $('.answer-body'))", 1000); 
}) 

function DisplayTime(currentTime, destination) { ... } 

現在DisplayTime函數裏,我展示了一些自定義的文本,調用destintion.html(..),以顯示自定義文本。 KEWL。最後,當我顯示文本後,我正在考慮將1秒currentTime,因此當下一次迭代時,它不使用原始時間值,而是1秒後。

問題:我無法將currentTime變量傳遞給setInterval函數。我不是特別想在這裏有一個匿名函數,除非我沒有選擇。

有人可以幫我在這裏或重構我的錯誤代碼嗎?

所以每秒都會重新顯示新的秒數。

回答

1
$(document).ready(function() { 
    var currentTime = new Date('3/09/2010 9:27:29 PM'); 
    var destination = $('.answer-body'); 
    function DisplayTime() 
    { 
     destination.html(currentTime); 
     currentTime.setTime(currentTime.getTime() + 1000); 
    } 
    var id = setInterval(DisplayTime, 1000); 
}) 

這在函數中使用函數(閉包),但不是匿名函數。 DisplayTime將不能從外部範圍訪問。沒有真正的理由不喜歡匿名函數,適當地使用。我會在這裏使用一個。

5

相反,你應該使用匿名函數在這裏,像這樣:

setInterval(function() { 
    DisplayTime(currentTime, $('.answer-body')); 
}, 1000); 

永遠不要傳遞一個字符串給setInterval()setTimeout()如果你能避免它,它執行eval()和由於currentTime不是全局變量,因此存在範圍問題,例如您目前遇到的問題。

+0

太棒了@Nick Craver :)我剛剛添加了'currentTime.setTime(currentTime.getTime()+ 1000);'(點頭@Matthew Flashcen)和繁榮 - 她工作:)謝謝堆! – 2010-09-04 22:54:16