このフィドルはjqueryの遅延オブジェクトに関するものです。実行順序は1,4,2,3
です。 jquery v1.x
とでは期待通りに動作しますが、v3.x
では動作しません。私は何が欠けていますか?jQuery deferredはjQuery v1.xとv2.xで動作しますが、v3.xでは動作しません
適切な順序は1,4,2,3,all done
ですがv3
で、それは単純にjQueryのバージョンを変更し、あなたがv3.x
と、それは1,4,2,3
ために動作しないことがわかりますwhen/all done
トリガ3
前に意味をなさない1,2,4,all done,3
です。
フィドル
https://jsfiddle.net/ergec/mrd2dt3a/
、これらはコードです。
CSS
div {
width: 0px;
height: 20px;
}
.div1 {
background-color: red;
}
.div2 {
background-color: yellow;
}
.div3 {
background-color: lightblue;
}
.div4 {
background-color: gray;
}
ジャバスクリプト
var defer = $.Deferred();
var div1 = defer.then(function(value) {
return $(".div1").animate({
width: "100%"
}, 1000);
});
var div2 = div1.then(function(value) {
$("#status").append("<p>div1 done</p>");
return $(".div2").animate({
width: "100%"
}, 3000);
});
var div3 = div2.then(function(value) {
$("#status").append("<p>div2 done</p>");
return $(".div3").animate({
width: "100%"
}, 2000, function() {$("#status").append("<p>div3 done</p>");});
});
var div4 = function() {
return $.Deferred(function(dfd) {
$(".div4").animate({
width: "100%"
}, 1500, dfd.resolve);
}).promise().done(function() {$("#status").append("<p>div4 done</p>");});
}
$.when(div1, div2, div3, div4()).then(function() {
$("#status").append("<p>all done</p>");
});
defer.resolve();
HTML
<div class="div1">div1</div>
<div class="div2">div2</div>
<div class="div3">div3</div>
<div class="div4">div4</div>
<span id="status"></span>
それは正常に動作します。おそらく、間違ったバージョンの3.xを含んでいるでしょう(スリムバージョンはすべてのメソッドを持っていません)。 –
@KevinB順序は異なります。それは '1,4,2,3、すべて完了'でなければなりません。しかし、 'v3'では' 1,2,4、all done、3'が '3 /' done 'の前にトリガするのを意味しません。すべて完了した後に最後にする必要があります – Ergec
コードを歩いて、あなたが得る順序は意味をなさない。 –