Loop只能工作16次而不是36次

时间:2017-05-03 19:58:35

标签: javascript

您好我在尝试创建此循环时处于黑屏模式 代码是这样的:

function finished() {
    var summaryDiv = document.createElement("DIV");
    summaryDiv.setAttribute("id","summary");
    document.getElementById("main_content").appendChild(summaryDiv);

    var summaryLabel = document.createElement("P");
    summaryLabel.setAttribute("id","score");
    document.getElementById("summary").appendChild(summaryLabel);

    var radios = document.getElementsByTagName('input');
    var value = 0;
    for (var i = 0; i < radios.length; i++) {
        if (radios[i].type === 'radio' && radios[i].checked && radios[i].value == "true") {
            value += 1;
            console.log(value);
        } else {
            console.log(value);  
        }
        document.getElementsByClassName("qcontainer")[i].style.display = "none";
        document.getElementById("score").innerHTML = value;
    } 

}

// radios.length的值是36,看起来它只需要前16个单选按钮的值,如果另外8个单选按钮的值为TRUE则无关紧要它始终只返回前16个单选按钮的TRUE按钮,我知道它可能有点令人困惑,但我不知道这个循环有什么问题。

1 个答案:

答案 0 :(得分:1)

official documentation返回实时HtmlCollection。这意味着当您从DOM中删除元素时,可以通过removeChild或通过设置父级的innerHTML来更新集合。

像这样循环实时HtmlCollection的一种可能方法是在集合的.length上执行一段时间。

while (radios.length) {
    // Use radios[0]
    // Remove radios[0] from DOM
}