如何检查是否选中了单选按钮?

时间:2018-05-15 14:27:31

标签: javascript radio-button

我正在为学校做个性测验,如果问题没有得到解答,我想创建一个警报。

这是其中一个答案的例子(每个问题有四个答案)

<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!");
    }
}

我创建了一个数组来完成所有问题并检查是否所有人都接听了。我想我可以通过检查具有相同名称的所有元素来做到这一点,但它似乎不起作用。

我不确定如何检查至少有一个答案被标记出来。

我将非常感谢您的帮助,并提前感谢您!

3 个答案:

答案 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);