2013-03-25 72 views
2

也許我錯了,但我想連鎖3個函數,第二個函數在第一個函數完成時開始,第三個函數在第二個函數完成時開始。按照docs我應該能夠做到這一點是這樣的:如何一個接一個地執行功能?

$.when(first()).then(second()).then(third()); 

他們似乎都在同一時間執行。是什麼賦予了?

My fiddle

我也試過:

​​

這將在第一個div褪色,但沒有第二和第三;

+0

你的意思是,當函數完成,或在動畫完成,因爲這些是兩個完全不同的事情。 – loganfsmyth 2013-03-25 01:17:24

+0

http://jsfiddle.net/9XECY/4/ – 2013-03-25 01:18:09

+0

對不起,我的意思是動畫完成時。 – 2013-03-25 01:37:51

回答

3

你迫使這些函數立即執行。 (順便說一下,它們並不是同時執行,而是一個接一個地執行,因爲JavaScript是單線程的。)

您需要編寫$.when(first).then(second).then(third)(其中第一個是承諾),並讓庫執行它們。不是自己執行它們(這是parens所做的)。

編輯:哦,沒有看到小提琴。是的,SeanJohnson說的。

1

只需first(); second(); third();將工作得很好。 JavaScript是單線程的。

採用whenthen是東西整合Promise,如Ajax請求(至少,這是我的理解爲非jQuery的用戶)

編輯:這是你的jsFiddle重拍使用CSS只,順便說一下^ _^

0

如果你想動畫完成後JS Fiddle做每一個功能,

用途:

var first = function(callBack1, callBack2){ 
    $("#div1").fadeIn(2000, function(){callBack1(callBack2)}); 
} 
var second = function(callBack){ 
    $("#div2").fadeIn(2000, callBack); 

} 

var third = function(){ 
    $("#div3").fadeIn(2000); 

} 


first(second, third); 
+0

他使用jQuery Deferreds來避免所有這些回調的需要。 – loganfsmyth 2013-03-25 01:46:54

相關問題