2010-09-09 73 views
12

我有一個奇怪的問題,在這裏使用html函數的延遲功能。JQuery:使用HTML或文本設置的延遲不起作用

我用$('#element').html('Hello World');

設置我想在3秒內本文消失文本後設置HTML文本。

所以下一行我寫道:

$('#element').delay(3000).html('&nbsp'); 

這一個不工作,它設置的html &nbsp,而不用等待3秒,它看起來像jQuery是跳過延時功能。例如使用這個與fadeOut工作正常。我想這與延遲隊列中的事情有關。

但爲什麼沒有這項工作。它非常簡單,等待3秒鐘然後運行html函數。

有人可以提醒嗎?謝謝。

PS:爲了您的信息,我使用jQuery 1.4.2

回答

19

延遲()默認爲動畫隊列,像淡出(),等等。你應該使用的setTimeout()替代效應:

window.setTimeout(function() { 
    $("#element").html(' '); 
}, 3000); 

http://api.jquery.com/delay/

jQuery.delay()最好用於延遲排隊的jQuery效果等,並且不是JavaScript的原生代碼setTimeout函數,它可能更適合某些用例。

+4

更準確,'.delay()'適用於任何* *隊列,它只是*默認*到動畫隊列:) – 2010-09-09 11:21:28

+0

@Nick:感謝您的修正,更新:-) – 2010-09-09 11:41:10

+0

由於這一個正在工作。 還有一個問題:在所有瀏覽器上都可以工作嗎?即時通訊不知道是否window.setTimeout將工作在所有IE和FF版本。 – NovumCoder 2010-09-09 11:53:18

14

.html()不排隊的功能。如果你想它,以便發生在動畫隊列,你必須.queue()它自己,是這樣的:

$('#element').delay(3000).queue(function(n) { 
    $(this).html('&nbsp'); n(); 
}); 

如果你不將動畫鏈接或像這樣的東西,使用setTimeout()setInterval()(取適合於這種情況)直接地,.delay()just a wrapper對於setTimeout()並且當沒有必要時沒有理由使用額外的代碼/複雜度。