如何隐藏多个项目,但只叫了一次处理?(how to hide multiple items but

2019-09-16 15:19发布

我躲在多个项目是这样的:

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

问题是,这个记录四次。 我无法控制的原因,我不能对每个元素使用共同的类。 是否有一个很好的jQuery上下的办法,使处理器仅火灾的最后一个项目有隐藏后? (或第一,因为它们应该是几乎同时)

此外,该元素将被隐藏和显示很多次,所以无论是用于限制处理程序调用将不得不事后复位。

我能明显把某种布尔的处理程序,但我希望的是清洁的解决方案。

Answer 1:

你可以使用$。当()和deferred.done()

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

简单的工作示例



Answer 2:

关于什么...

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


Answer 3:

你可以使用一个队列( 尽管@ ManseUK的回答貌似正确的方式,现在做到这一点

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

演示在http://jsfiddle.net/duzB8/



Answer 4:

var counter = 0;
$('#item1,#item2,#item3').hide('slow',function() {
    counter++;
    if ( counter == 3 ){ console.log('hidden'); }
});


文章来源: how to hide multiple items but only call the handler once?
标签: jquery hide