我正在为学校做个性测验,如果问题没有得到解答,我想创建一个警报。
这是其中一个答案的例子(每个问题有四个答案)
<div class="choice"><label class="input"><input type="radio" name="colour" value="-1"/><span class="marked"></span></label><img src="images/2.jpg" alt="Gothic colour palette"></div>
这是我的javascript:
var y = new Array(5);
y[0] = document.getElementsByName("color"):checked;
y[1] = document.getElementsByName("pattern"):checked;
y[2] = document.getElementsByName("store"):checked;
y[3] = document.getElementsByName("hat"):checked;
y[4] = document.getElementsByName("hair"):checked;
var i;
for (i=0; i < x.length; i++){
if (y[i] == false){
alert("You didn't answer all the questions!");
}
}
我创建了一个数组来完成所有问题并检查是否所有人都接听了。我想我可以通过检查具有相同名称的所有元素来做到这一点,但它似乎不起作用。
我不确定如何检查至少有一个答案被标记出来。
我将非常感谢您的帮助,并提前感谢您!
答案 0 :(得分:1)
var i;
for (i=0; i < x.length; i++){
if (!y[i].checked){
alert("You didn't answer all the questions!");
}
}
答案 1 :(得分:1)
首先,请注意document.getElementsByName返回一个集合。您需要遍历集合以检查每个按钮。我就是这样做的:
var nameList = ['color', 'pattern', 'store', 'hat', 'hair'];
for(var i = 0; i < nameList.length; i++) {
var isOneSelected = false;
var radioButtons = document.getElementsByName(nameList[i]);
for(var j = 0; j < radioButtons.length; j++) {
if(radioButtons[j].checked == true) {
isOneSelected = true;
break;
}
}
if(!isOneSelected) {
alert("You must provide an answer for " + nameList[i]);
break;
}
}
答案 2 :(得分:0)
问题出在这一行:
y[0] = document.getElementsByName("color")
因为document.getElementsByName
函数返回文档中具有指定名称(name属性的值)的所有元素的集合,作为 NodeList 对象。
NodeList 对象表示节点的集合。可以通过索引号访问节点。索引从0开始。
var y = new Array(5);
y[0] = document.getElementsByName("colour")[0].checked;
var i;
for (i=0; i < 1; i++){
if (y[i] == false){
alert("You didn't answer all the questions!");
}
}
<div class="choice"><label class="input"><input type="radio" name="colour" checked value="-1"/><span class="marked"></span></label><img src="images/2.jpg" alt="Gothic colour palette"></div>
您还可以使用Array.from
方法简化数组创建。
y = Array.from(document.querySelectorAll('input[type=radio]')).map(elem => elem.checked);