Javascript /jquery每次迭代后循环执行函数
javascript/jquery loop execute function after every iteration
var dagaData = ['Manok', 'Pusa', 'Daga', 'Ibon', 'Aso'];
$('#clicktest').on('click', function() {
$.each(dagaData, function(index, item) {
executeData(item);
alert(item);
});
});
function executeData(item) {
var items = $("<div></div>").text(item);
$('#pangtest').append(items);
}
是否有可能在每次迭代中执行函数?
现在,当我运行上面的代码时,它在追加发生之前完成了所有的迭代。
这就是为什么我添加了alert来查看每个alert是否附加在每次迭代后。
上面代码的输出:alert('Manok'), alert('Pusa') ,alert('Daga'), alert('Ibon'), alert('Aso')
执行append.
我想达到的是alert('manok') append, alert('Pusa') append, alert('Daga') append, alert('Ibon') append, alert('Aso') append
。
一般来说,虽然每次调用.append()
时DOM都会更新,但在整个JS函数完成之前,浏览器实际上不会重新绘制屏幕。(虽然一些浏览器会在警报打开时重新绘制,这就是为什么使用alert()
进行调试是一个坏主意:它可以以调用console.log()
的方式巧妙地改变行为。)
您可以通过使用基于setTimeout
的伪循环来解决这个问题-在超时之间浏览器然后有机会重新绘制:
var dagaData = ['Manok', 'Pusa', 'Daga', 'Ibon', 'Aso'];
$('#clicktest').on('click', function() {
var i = 0;
(function doNext() {
var item = dagaData[i];
executeData(item);
alert(item);
if (++i < dagaData.length)
setTimeout(doNext, 5);
})();
});
function executeData(item) {
var items = $("<div></div>").text(item);
$('#pangtest').append(items);
}
<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.11.1/jquery.min.js"></script>
<button id="clicktest">Test</button>
<div id="pangtest"></div>
或者只是使用原始的$.each()
循环,循环的内容包装在超时中,正如Bnrdo的答案。但是我更喜欢在前一个超时完成后再调度每个超时,因为这样可以保证执行的顺序。
用setTimeout
换行
$.each(dagaData, function(index, item) {
setTimeout(function() {
executeData(item);
alert(item);
}, 1);
});
相关文章:
- 如何在Javascript中延迟for循环执行
- 在多个(html)元素上循环执行相同的JavaScript函数属性更改
- Javascript ajax循环执行
- Jquery in 循环执行一些记录计算
- 对于大数据,循环执行速度慢
- 计算循环执行的次数
- 为javascript循环执行实现暂停和恢复机制
- 在url上循环执行同样的操作
- done() 究竟是如何工作的,以及如何在 done() 中循环执行
- 如何停止for循环执行,直到for循环内部的DWR方法执行完成
- JavaScript Bookmarklet:无限循环执行一个函数,然后在页面加载时再次执行该函数
- JavaScript.带有innerHTML的循环在循环执行期间不会更新
- 使用jquery循环执行ajax回调
- Javascript /jquery每次迭代后循环执行函数
- 在JavaScript中设置循环执行的延迟
- 循环执行jQuery语句
- 取消jsfiddle中的无限循环执行
- jQuery在ajax成功后继续循环执行
- 按键排序数组或:为什么我的for循环执行无序
- 通过forEach循环执行任务以复制具有数组长度的任务