[英]jQuery run code after chunked $.each() is finished
使用以下代码:
$('#button').on('click', function () {
var longArray = searchArray; // assume this has 100 or more postalcodes init
var shortArrays = [], i, len;
for (i = 0, len = longArray.length; i < len; i += 100) {
shortArrays.push(longArray.slice(i, i + 100));
}
// Now we iterate over shortArrays which is an array of arrays where each array has 100 or fewer
// of the original postalcodes in it
for (i = 0, len = shortArrays.length; i < len; i++) {
// shortArrays[i] is an array of postalcodes of 100 or less
$.each(shortArrays[i], function(index, value){
setTimeout( function() {
// Each parent gets its own searchToggle class
$('.postcodes input[data-postcode*="' + value + '"]').parent().parent().addClass('searchToggle');
// Each parent also gets a data filter attribute for ordering the results
$('.postcodes input[data-postcode*="' + value + '"]').parent().parent().attr('data-filter' , index);
// We display the items in the search array
$('.postcodes input[data-postcode*="' + value + '"]').parent().parent().css('display', 'flex');
$('.postcodes .searchToggle .postcode input[data-postcode*="' + value + '"]').parent().css('display', 'flex');
}, 0 );
})
} // /for
alert('Finished message');
});
一旦 $.each() 完成,我会尝试显示一条警报消息(用于调试)。 由于每个都经过一个可能有 1000 多个邮政编码的数组,所以我将它分成 100 个块。这是为了防止可怕的浏览器无响应。 这一切正常,但警报会在点击时立即触发。
我已经尝试了几件事:
ABOVE THE EACH var count = 0; INSIDE THE EACH count++ if ( count == longArray.length ) { ALERT }
ABOVE THE EACH var count = 0; INSIDE THE EACH count++ if ( count == longArray.length ) { ALERT }
但这也立即触发了警报???在查看 jQuery 文档和我之前编写的代码时,它应该只在每个代码完成后运行代码,但在这种情况下它不会。
关于为什么会这样以及如何解决它的任何想法。
PS:此警报可能是其他代码。 就像对结果或其他东西进行排序一样。
PS2:我可以更改您看到的所有 js/jQuery,但我无法更改任何 HTML 选择器。
PS3:感谢您考虑这个问题,特别是评论/回答!
我已经通过添加另一个 setTimeout 来解决它。
所以我替换了警报(见问题)
alert(Finished message);
至
setTimeout( function() {
// As an example I used alert in my question and here in this answer.
// This can be offcourse anything else. I use it for instance to sort the results.
alert(Finished message);
}, 0 );
这对我有用,但它可能不是处理它的最佳方法。 所以我还是很期待有经验的人对这个问题或答案的看法。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.