2012-06-18 81 views
4

我無法讓jQuery的延遲功能與append函數一起使用。哪裏不對?有沒有辦法讓它工作?我想避免直接使用setTimeout,以便讓客戶更容易遵循,而且客戶將自己維護,無需任何經驗。jQuery延遲使用append()

我的代碼: 'TESTTEST' 印在同一時間

$('#chatwindow').append('test').delay(2000).append('test'); 

在這段代碼中,我得到的,delay被忽略。

+1

你試圖追加兩次測試嗎? –

+0

是的,測試是一個字符串,它應該被添加兩次,你可以用任何你想要的文本替換它。 –

+1

你可以在第一個地方搜索:) - http://stackoverflow.com/questions/4544126/jquery-delay-not-working – Rifat

回答

22

這是因爲delay(2000)隊列fx隊列默認情況下,其中append()從來沒有的一部分。

取而代之,您可以使用queue()函數在其上專門排隊append()

$('#chatwindow').append('test').delay(2000).queue(function (next) { 
    $(this).append('test'); 
    next(); 
}); 

你可以在這裏看到一個這方面的例子; http://jsfiddle.net/mj8qC/

但是,我同意@ ascii-lime的評論;我期望客戶將有更多的機會了解setTimeout,因爲它是JavaScript的基礎部分,而不像delay(),它會迷惑許多用戶(來自有關StackOverflow問題的經驗)。

FWIW,這個問題引發我寫a blog post的使用delay();它比這個答案更詳細,並且可能是對其他人更好的進一步閱讀。

+3

雖然這裏有幾個答案,展示瞭如何使用jquery中的隊列是如此巨大的信息。絕對是最好的答案。 – Ohgodwhy

+2

+1 append默認情況下不排隊,它會立即執行,因爲它不用於動畫。這會將其添加到隊列中。對於OP的客戶來說,這比「setTimeout」更容易理解,但這個答案絕對是最有用的。 – Paulpro

+0

真棒回答馬特,一個很大的大謝謝你! –

3

delay()是一個棘手的函數,它不能與任何東西一起使用:它主要是爲了效果(立即返回,它不會阻止JavaScript執行流)。

the doc

它可以使用標準的動畫隊列或定製隊列使用

(所以你必須使用自定義的隊列中,如果你不使用FX隊列)

在這種情況下使用setTimeout。

1

是的。延遲的回報是即時的。您的代碼中沒有任何內容表明reurn應該等待。你需要使用setTimeout引擎來等待。