Javascript的for循环在遇到if语句时停止执行。
Javascript的for循环在遇到if语句时停止执行。
我正在用JavaScript和PHP编写一个表单生成器。在JavaScript中遇到了一个小问题。\n代码在第43行停止。在完成for循环后,为什么它也退出了if语句?\nscript.js\n
function addrow(){ var table = document.getElementById('table_actions') var row = table.insertRow(-1); addcell(table, row); } function addcell(table, row){ // ------配置文件 ----- var object = new Array(); object[0] = "文本"; object[1] = "密码"; object[2] = "复选框"; object[3] = "单选按钮"; object[4] = "标签"; object[5] = "文本区域"; // --------结束配置文件 ----- for (var i = 0; i < 4; i++) { console.log(i); var cell = row.insertCell(i); if (i == 0){ var input = document.createElement('input'); input.setAttribute('type', 'text'); input.setAttribute('name', 'beschriftung'); cell.appendChild(input); } else if (i == 1) { var input = document.createElement('input'); input.setAttribute('type', 'text'); input.setAttribute('name', 'name'); cell.appendChild(input); } else if (i == 2) { var dropdown = document.createElement('select'); for (var i = 0; i < object.length; i++) { var option = document.createElement('option'); option.text = object[i]; option.value = object[i]; dropdown.options.add(option); cell.appendChild(dropdown); } continue; } else if (i == 3) { var checkbox = document.createElement('input'); checkbox.setAttribute('type', 'checkbox'); checkbox.setAttribute('name', 'pflicht'); cell.appendChild(checkbox); } else { cell.setAttribute('name', i); } } }
\nhtml\n
\n请查看这里
\n为什么JavaScript在第43行的for循环后退出if语句?
问题的原因是在内部循环中,使用了与外部循环相同的计数器变量 i 。这导致了循环计数器的混乱。
解决方法是将内部循环中的计数器变量 i 改为另一个变量 j 。同时,还需要将对 i 的引用也改为对 j 的引用。这样可以确保内部循环的计数器与外部循环的计数器相互独立,避免了循环混乱的问题。
修正后的代码如下:
} else if (i == 2) { var dropdown = document.createElement('select'); for (var j = 0; j < object.length; j++) { var option = document.createElement('option'); option.text = object[j]; option.value = object[j]; dropdown.options.add(option); cell.appendChild(dropdown); } continue; }
在上述代码中,问题出现在使用相同的变量i在if语句循环中,因此在最后它的值变成了object.length
。
解决这个问题的方法是使用不同的变量名来避免混淆。在内部循环中,可以使用其他变量名代替i。这样可以确保在内部循环结束后,外部循环的i仍然具有正确的值。
以下是修改后的代码示例:
for (var i = 0; i < 4; i++) { if (i == 0) { ... } else if (i == 2) { for (var j = 0; j < object.length; j++) { ... } // Now i still has the correct value } ... }
如果你想了解更多关于这个问题的详细信息,可以查看这个回答。这个回答提供了一些有用的细节。
总之,为了避免这种问题的发生,我们应该遵循良好的编程实践,如在作用域的顶部声明变量,并确保正确定义使用的变量。此外,使用函数语句将代码包裹起来,并添加"use strict"可以更严格地追踪这类问题。另外,使用工具如JSLint也可以帮助我们发现这些问题。