在jQuery中,有可能调用回调 或者触发事件 调用后.each()(或任何其他类型的迭代回调)有completed

例如,我想完成这个"淡入淡出"

$(parentSelect).nextAll().fadeOut(200, function() {
    $(this).remove();
});

在进行一些计算和插入之前新的 之后的元素$(parentSelect)

我可以轻松地.bind()事件回调的必要逻辑,但我不确定如何干净地调用.trigger()经过上述迭代后完全的

如果是$.each(),我考虑过在数据参数的末尾添加一些东西(我会在迭代主体中手动查找),但我不想被迫这样做,所以我希望有一些其他优雅的方法来控制

答案

@tv 答案的替代方案:

var elems = $(parentSelect).nextAll(), count = elems.length;

elems.each( function(i) {
  $(this).fadeOut(200, function() { 
    $(this).remove(); 
    if (!--count) doMyThing();
  });
});

注意.each()本身就是synchronous — 调用之后的语句.each()只会在之后执行.each()通话完成。开始了 在里面.each()迭代当然会以自己的方式继续下去。

因此,上面的解决方案会跟踪有多少元素正在褪色。.fadeOut()获取完成回调。

这是四年前的答案(2014 年的此时)。

来自: stackoverflow.com