对于循环,Javascript只运行一次

时间:2013-10-18 15:58:08

标签: javascript for-loop

这是我的代码。我不太明白为什么for循环只运行一次,包括内部和外部。生成警报消息时,nodeList.lengthinnerNodeList.length会显示适当的值。我发现ij都不会增加到0以上。请指出代码有什么问题。

function getCategoryElements() {
var newCategoryDiv = document.getElementById("category");
var nodeList = newCategoryDiv.childNodes;

for (var i = 0; i < nodeList.length; ++i) {
    var innerNodeList = nodeList[i].childNodes;
    alert("innerNodeList Length" + innerNodeList.length.toString());

    for (var j = 0; j < innerNodeList.length; ++j) {
        if (innerNodeList[j].nodeName == "SELECT") {
            alert("inside select Node value " + innerNodeList[j].nodeValue.toString());
            document.getElementById("newCategories").value = 
                document.getElementById("newCategories").value + '<%=delimiter%>' + innerNodeList[j].nodeValue;
        } else if (innerNodeList[j].nodeName == "TEXTAREA") {
            document.getElementById("newCategoriesData").value =
                document.getElementById("newCategoriesData").value + '<%=delimiter%>' + innerNodeList[j].nodeValue;
        }
    }
  }
}

1 个答案:

答案 0 :(得分:1)

var newCategoryDiv, nodeList, innerNodeList, innerNode, i, j;

newCategoryDiv = document.getElementById("category");
nodeList = newCategoryDiv.childNodes;

for (i = 0; i < nodeList.length; ++i) {
    innerNodeList = nodeList[i].childNodes;
    alert("innerNodeList Length" + innerNodeList.length.toString());

    for (j = 0; j < innerNodeList.length; ++j) {
        innerNode = innerNodeList[j];
        if (innerNode.nodeName === "SELECT") {
            alert("inside select Node value " + innerNode.nodeValue.toString());
            document.getElementById("newCategories").value += '<%=delimiter%>' + innerNode.nodeValue;
        } else if (innerNode.nodeName === "TEXTAREA") {
            document.getElementById("newCategoriesData").value += '<%=delimiter%>' + innerNode.nodeValue;
        }
        // Will this work?
        alert('Does this alert appear'); 
    }
}

我冒昧地重构你的代码并将其清理一下。如果您不知道,所有变量都具有Javascript中的函数作用域,因此无论您在单个函数中声明它们,Javascript都将它们视为变量声明是第一个语句。

看起来你的代码在语法上是正确的,所以我认为找到问题的最合理的地方是在最后一次alert函数调用之后可能会发生错误。

为了检查这一点,请尝试在内部循环的末尾添加另一个alert函数调用。如果它没有运行,你就会知道情况就是这样。