2016-12-23 8 views
0

ほとんどjQueryのメソッドの形式は次のとおりです。continuationdoSomethingが終了した後の要素毎に一度を実行され、継続しているコールjQueryの継続は正確に一度の代わりに、一度各要素について

$elements.doSomething(continuation); 

。例えば、

$("div.foo").fadeOut(function() { alert("One foo has been hidden."); }); 

が「完了」と表示されますのために、それ以降の各 fooがフェードアウトされています。

今私はdoSomethingのはすべて要素に対して実行された後に一度だけ継続を実行したいと思います。一致する要素がない場合、継続は直ちに実行されます。例:

$("div.foo").fadeOut(... some magic here ... 
        function() { alert("All foos have been hidden."); }); 

私は明らかに(などの呼び出しを数えることによって)これを自分で実装することができますが、私は思っていた。すでにこれを行い、いくつかのjQueryのビルトインはありますか?

答えて

4

ちょうどRTFM-ingことによってそれを自分自身を発見した:jQueryの1.6のよう

を、.promise()方法は、ときに、すべてのマッチング全体としてアニメーションのための単一のコールバックを実行するdeferred.done()方法と組み合わせて使用​​することができます要素がアニメーションを完了しました。

このように、 "魔法" のようになります。

$("div.foo").fadeOut(); 
$("div.foo").promise().done(function() { alert("All foos have been hidden."); }); 

とライブ作業例:

$("div.foo").fadeOut(); 
 
$("div.foo").promise().done(function() { alert("All foos have been hidden."); });
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script> 
 
<div class="foo">123</div> 
 
<div class="foo">123</div> 
 
<div class="foo">123</div>

+0

の約束は、移動するための方法です! – G0dsquad

+0

私は20秒で私を打つ:) haha​​私の+1を得ました – Dekel

+0

@Dekel:申し訳ありません、私は本当にあなたを助けてくれてありがとう! :-) – Heinzi

関連する問題