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');
});