为什么循环后的代码在循环内的dom更改之前执行
Why the code after loop executes before dom change inside of the loop?
我正在编写一个代码,从文本框中读取人的名字,然后为该名称中的每个字母显示一个符号/手势。名称中的每个字母都在FOR循环中读取,该循环还根据读取的字母改变手势/手势。在循环停止工作后,页面应该刷新,但由于某些未知的原因,在循环结束之前页面刷新。
我决定用下面所示的简短代码来模拟这种情况。当您运行它时,您将看到在执行循环中的代码之前出现警告。为了方便,我还在这里创建了一个JSFiddle。
function show_name(name) {
for (var i = 0, len = name.length; i < len; i++) {
if (name[i] == "H") {
var text = document.getElementById("text_tag");
text.innerHTML = "Hillary Clinton was a hot baby in the past :D";
}
}
alert("But Bill preferred Monica :(");
}
<input type="text" id="name" size="18" style=" font-size:17px; margin-left:4px; " onchange="show_name(this.value)" />
<p id="text_tag"></p>
你的循环正在正确执行。但是,在文本出现在dom中之前,您会收到警告。因为浏览器以批处理方式呈现更改,所以当它完成show_name函数时,它将更新文本。您可以通过在循环中添加console.log/alert来确定。
function show_name(name) {
for (var i = 0, len = name.length; i < len; i++) {
console.log(name[i]); //alert(name[i]);
if (name[i] == "H") {
var text = document.getElementById("text_tag");
text.innerHTML = "Hillary Clinton was a hot baby in the past :D";
}
}
setTimeout(function(){
alert("But Bill preferred Monica :(");
},50);
}
<input type="text" id="name" size="18" style=" font-size:17px; margin-left:4px; " onchange="show_name(this.value)" />
<p id="text_tag"></p>
显示一个警告并不意味着你的页面正在刷新,如果你真的刷新你的代码,你会失去输入元素中的用户数据,你的代码所做的是在输入中搜索H当数据在你的循环中被改变,然后在里面显示一条消息。
<p id="text_tag"></p>
alert("But Bill preferred Monica :(");
如果你想让alert()出现在循环的末尾,那么像这样移动alert()在循环中的位置。
function show_name(name) {
for (var i = 0, len = name.length; i < len; i++) {
if (name[i] == "H") {
var text = document.getElementById("text_tag");
text.innerHTML = "Hillary Clinton was a hot baby in the past :D";
}
// end of loop
if(i==(name.length-1)){
alert("But Bill preferred Monica :(");
}
}
}
PS:我已经尽力理解你的问题&似乎你并不想"刷新"页面,但如果你这样做,那么你应该简单地window.location.reload()
相关文章:
- 如何在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循环执行任务以复制具有数组长度的任务