Jquery 如何隐藏多个项目,但只调用处理程序一次?

Jquery 如何隐藏多个项目,但只调用处理程序一次?,jquery,hide,Jquery,Hide,我隐藏了多个类似以下内容的项目: $('#item1,#item2,#item3').hide('slow',function() { console.log('hidden'); }); 问题是这个日志记录了四次。由于我无法控制的原因,我无法在每个元素上使用公共类。有没有一个好的jquery-ish方法可以让这个处理程序只在最后一个项目隐藏后启动?(或者是第一种,因为它们实际上应该是同时发生的) 此外,元素将被隐藏并多次显示,因此用于限制处理程序调用的任何内容都必须在之后重置 很明显

我隐藏了多个类似以下内容的项目:

$('#item1,#item2,#item3').hide('slow',function() {
    console.log('hidden');
});
问题是这个日志记录了四次。由于我无法控制的原因,我无法在每个元素上使用公共类。有没有一个好的jquery-ish方法可以让这个处理程序只在最后一个项目隐藏后启动?(或者是第一种,因为它们实际上应该是同时发生的)

此外,元素将被隐藏并多次显示,因此用于限制处理程序调用的任何内容都必须在之后重置

很明显,我可以在处理程序中加入某种布尔值,但我希望有一个更干净的解决方案。

那么

$('#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');
    }
});
你可以使用和

您可以使用队列(尽管现在看来这是正确的方法)


演示在
('slow')
之后缺少一个右括号,但除此之外,这项工作做得相当巧妙。@shannethat我认为它现在就在那里了。。。还添加了一个示例。。。谢谢:-)对答案增加了一点扭曲,相同的概念,但使用了正确的
this
var counter = 0;
$('#item1,#item2,#item3').hide('slow',function() {
    counter++;
    if ( counter == 3 ){ console.log('hidden'); }
});
$.when($('#item1,#item2,#item3').hide('slow')).done(function() {
   console.log('hidden');
});
$({})
    .queue(function(next){
        $('#item1, #item2, #item3').hide('slow', next);
    })
    .queue(function(){
        console.log('hidden');
    });