2011-09-11 51 views
6

问题非常简单。如果我用jQuery选择两个或多个元素,例如,使用jQuery的fadeOut()函数来隐藏它们,则会调用两次(对于每个元素)回调函数。有没有办法只接收一个回调?使用jQuery隐藏多个元素并获得一个回调

我目前用来执行此任务的代码粘贴在下方。

$('#element-1, #element-2').fadeOut(250, function() { /* Callback invoked twice. */ }); 

类似的问题之前(jQuery multiple animate() callback)已经发布,但解决方案似乎是什么似乎一个简单的问题相当复杂。

回答

16

您可以使用$.when[docs]deferred objects):

$.when($('#element-1, #element-2').fadeOut(250)).then(function() { 
    // do something 
}); 

DEMO

这适用于任何AFAIK动画。

+0

有没有其他办法?它看起来如此漫无目的......或者被认为是jQuery中的一种合适的方式,这只是我对对象的无知? –

+0

我不知道任何其他方式,'.animate'文档也没有提及任何东西。 –