我躲在多个项目是这样的:
$('#item1,#item2,#item3').hide('slow',function() {
console.log('hidden');
});
问题是,这个记录四次。 我无法控制的原因,我不能对每个元素使用共同的类。 是否有一个很好的jQuery上下的办法,使处理器仅火灾的最后一个项目有隐藏后? (或第一,因为它们应该是几乎同时)
此外,该元素将被隐藏和显示很多次,所以无论是用于限制处理程序调用将不得不事后复位。
我能明显把某种布尔的处理程序,但我希望的是清洁的解决方案。
你可以使用$。当()和deferred.done()
$.when($('#item1,#item2,#item3').hide('slow')).done(function() {
console.log('hidden');
});
简单的工作示例
关于什么...
$('#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');
}
});
你可以使用一个队列( 尽管@ ManseUK的回答貌似正确的方式,现在做到这一点 )
$({})
.queue(function(next){
$('#item1, #item2, #item3').hide('slow', next);
})
.queue(function(){
console.log('hidden');
});
演示在http://jsfiddle.net/duzB8/
var counter = 0;
$('#item1,#item2,#item3').hide('slow',function() {
counter++;
if ( counter == 3 ){ console.log('hidden'); }
});