jquery 在每次()迭代后回调
jquery callback after each() iteration
$.each(mappings, function(key, item) {
if (match(selected_values, item)) {
$(key).show("slow");
} else {
$(key).hide("slow");
}
});
//At this point, all items are still visible!
var item_count = $('.item').filter(':visible').length;
if (item_count < 12) {
$('.item').not(':visible').slice(0,12 - item_count).show();
}
我正在迭代数据结构,根据某些选定的属性,某些项目被隐藏,其他项目被显示。
麻烦的是,客户端要求最少的项目可见。因此,即使过滤工作正常,并且我得到了 3 个可见项目,也应该用另外 9 个元素填充它们,以便至少始终显示 12 个。
现在,在每次迭代之后,.show()
和 .hide()
函数似乎尚未终止。如何以及在何处正确应用填充功能?
我已经检查过了在 .each(( 完成后调用 jQuery 函数,但他在每个.show()
或.hide()
后应用该函数,这不是我想要的(在迭代过程中填充是不行的,我们首先需要隐藏所有不适用的(。
这个:在jQuery每次迭代后执行回调不起作用,当调用函数时,我遇到了同样的问题(show(( 和 hide(( 尚未完成(。
编辑:我刚刚发现删除.show()
和.hide()
方法中的"slow"属性可以解决问题。现在,如果我想保留动画怎么办?
它是同步的,所以你不需要回调,但你有异步动画,这才是真正的问题。只需在循环中使用计数器而不是检查元素长度,或添加一个类:
$.each(mappings, function(key, item) {
if (match(selected_values, item)) {
$(key).addClass('selected').show("slow");
} else {
$(key).hide("slow");
}
});
if ($('.item.selected').length < 12) {
$('.item').not('.selected').slice(0,12 - item_count).show();
}
只需将.stop()
添加到链中即可获得良好的结果:
$('.item').not(':visible').slice(0,12 - item_count).stop().show();
任何先前启动的动画(显示/隐藏(都将停止,并且仅显示该项目。
相关文章:
- 在es6中,将带有回调的事件侦听器设置为可迭代的
- 迭代、JSON和JS中的回调
- jquery 在每次()迭代后回调
- 如何验证for循环是否完成了node js中的所有迭代,循环是否包含带回调的函数调用
- 循环中的Node.js回调具有错误的迭代器值
- 防止使用迭代的 JavaScript 中的嵌套回调
- Node.js:异步嵌套回调在for循环的每个迭代中都不起作用
- 如何知道回调循环的哪一次迭代以及何时执行
- 如何使用Lo-dash在_.filter的回调函数中迭代数组
- Javascript-如何在带有回调的for循环中使用迭代器
- 我得到了错误“返回绑定”.PBKDF2(密码、盐、迭代、keylen、回调);^ TypeError: Not a bu
- 由生成器内部使用的迭代器回调产生
- 如何将PHP字符串中的值回显到循环的不同迭代中
- 迭代期间的回调范围
- 为什么被迭代的对象要通过回调传递回
- 调用内部异步回调后迭代for循环
- 在forEach迭代数组后发送响应(使用回调?)
- Node.js async.each()回调在所有迭代完成之前被调用
- 如何在JS的回调迭代中显示不同的内容
- 将循环迭代器值绑定到Javascript中的回调函数