我隐藏了多个这样的项目:
$('#item1,#item2,#item3').hide('slow',function() {
console.log('hidden');
});
问题是这个记录了四次。由于我无法控制的原因,我不能在每个元素上使用公共类。是否有一个很好的jquery-ish方法使这个处理程序只在最后一个项隐藏后触发? (或者第一个,因为它们应该几乎是同时的)
此外,元素将被隐藏并多次显示,因此用于限制处理程序调用的任何内容都必须在之后重置。
我显然可以在处理程序中添加某种布尔值,但我希望有一个更清晰的解决方案。
答案 0 :(得分:4)
您可以使用$.when()和deferred.done()
$.when($('#item1,#item2,#item3').hide('slow')).done(function() {
console.log('hidden');
});
答案 1 :(得分: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');
}
});
答案 2 :(得分:1)
您可以使用队列(虽然@ManseUK's answer看起来像现在正确的方式)
$({})
.queue(function(next){
$('#item1, #item2, #item3').hide('slow', next);
})
.queue(function(){
console.log('hidden');
});
答案 3 :(得分:0)
var counter = 0;
$('#item1,#item2,#item3').hide('slow',function() {
counter++;
if ( counter == 3 ){ console.log('hidden'); }
});