得到错误[对象HTMLCollection]

时间:2015-07-18 06:26:43

标签: javascript html

我在使用javascript进行简单测试时遇到问题。这是一个简单的例子。每个问题的div id在html代码中递增。

HTML

<form action="#">
    <div id="q1">
        <label>Q. ABCD</label>
        <label><input type="radio" name="radio1" value="1">A</label>
        <label><input type="radio" name="radio1" value="2">B</label>
        <label><input type="radio" name="radio1" value="3">C</label>
        <label><input type="radio" name="radio1" value="4">D</label>
    </div>
    ....
    ....
    <input type="button" value="Click to Submit" onClick="result();">
</form>

JS(10个问题)

function result() {
    var answer = new Array();
    for(var i=1; i<11 ; i++) {
        if(document.getElementById("q" + i).getElementsByTagName("input") != undefined) {
            answer[i] = document.getElementById("q" + i).getElementsByTagName("input");
        }
        else {
            answer[i] = 0;
        }
    }
    console.log(answer);
}

每次提交代码时都会收到错误[object HTMLCollection]。我应该怎么做才能获得数组中给出的每个答案的值,如果有人不回答任何问题,那么数组必须在其位置获得0值而不是undefined。我需要一个纯粹的JS和HTML解决方案。

3 个答案:

答案 0 :(得分:0)

试试这个

function result() {
    var answer = new Array();
    // there is no answer 0
    answer[0] = 'unused';
    for(var i=1; i<11 ; i++) {
        // check if the id exists first
        var container = document.getElementById("q" + i);
        if(container) {
            // get the selected radio checkbox
            var input = container.querySelector("input:checked");
            // if there's one selected, save it's value
            if(input) {
                answer[i] = input.value;
            }
            else {
                answer[i] = 0;
            }
        }
    }
    console.log(answer);
}

工作小提琴 - http://jsfiddle.net/dtpLjru1/

答案 1 :(得分:0)

在您的代码中,您尝试使用getElementByTagName()来存储HTML集合。此方法将返回名称为&#34;输入&#34;的所有标签,因此根据上面的代码总共有4个标签。

您可以修改代码,而不是那样。

假设您要存储&#34; 1&#34;如果选中单选按钮。否则0

function result() {
        var answer = new Array();
        for (var i = 1; i <= 4 ; i++) {
            if (document.getElementById("q" + i).getElementsByTagName("input") != undefined) {
                answer[i] = document.getElementById("q" + i).checked ? 1 : 0;
            }
            else {
                answer[i] = 0;
            }
        }
        console.log(answer);
    }

答案 2 :(得分:-1)

没有测试过代码,我们这样做了吗?

@testable import MyModule