Javascript的for循环在遇到if语句时停止执行。

8 浏览
0 Comments

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语句?

0
0 Comments

问题的原因是在内部循环中,使用了与外部循环相同的计数器变量 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;
}

0
0 Comments

在上述代码中,问题出现在使用相同的变量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也可以帮助我们发现这些问题。

0