2

私はこのような複数のアイテムを隠しています:

$('#item1,#item2,#item3').hide('slow',function() {
    console.log('hidden');
});

問題は、これが4回ログに記録されることです。私のコントロールが及ばない理由で、各要素に共通のクラスを使用することはできません。最後のアイテムが非表示になった後にのみこのハンドラーを起動させるためのjquery風の良い方法はありますか?(または最初の、それらは事実上同時でなければならないので)

また、要素は何度も非表示および表示されるため、ハンドラー呼び出しを制限するために使用されるものはすべて、後でリセットする必要があります。

ハンドラーにある種のブール値を入れることはできますが、よりクリーンなソリューションを望んでいました。

4

4 に答える 4

4

$ .when()deferred.done( )を使用できます

$.when($('#item1,#item2,#item3').hide('slow')).done(function() {
   console.log('hidden');
});

簡単な作業例

于 2012-04-19T10:21:07.790 に答える
3

どうですか...

$('#item1,#item2,#item3').hide('slow', function() {
    if ($(this).is(':last')){
        // code
    }
});

$(this)編集:コンテキストがhide()コールバック内で変更されるため、機能しません。最初にセレクターをキャッシュしてみてください。

var $els = $('#item1,#item2,#item3');
$els.hide('slow', function(e) {
    if ($(this).is($els.last())){
        alert('test');
    }
});
于 2012-04-19T10:16:12.550 に答える
1

キューを使用できます(@ManseUKの答えは今それを行う正しい方法のように見えますが

$({})
    .queue(function(next){
        $('#item1, #item2, #item3').hide('slow', next);
    })
    .queue(function(){
        console.log('hidden');
    });

http://jsfiddle.net/duzB8/のデモ

于 2012-04-19T10:26:12.187 に答える
0
var counter = 0;
$('#item1,#item2,#item3').hide('slow',function() {
    counter++;
    if ( counter == 3 ){ console.log('hidden'); }
});
于 2012-04-19T10:16:42.067 に答える