在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 年的此时)。