我在使用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解决方案。
答案 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