如何检查是否使用 JavaScript 选择了单选按钮?

IT技术 javascript radio-button
2021-01-17 13:17:47

我在 HTML 表单中有两个单选按钮。当其中一个字段为空时,会出现一个对话框。如何检查是否选择了单选按钮?

6个回答

让我们假设你有这样的 HTML

<input type="radio" name="gender" id="gender_Male" value="Male" />
<input type="radio" name="gender" id="gender_Female" value="Female" />

对于客户端验证,这里有一些 Javascript 来检查选择了哪一个:

if(document.getElementById('gender_Male').checked) {
  //Male radio button is checked
}else if(document.getElementById('gender_Female').checked) {
  //Female radio button is checked
}

根据您的标记的确切性质,上述内容可能会更有效,但这应该足以让您入门。


如果您只是想查看页面上的任何位置是否选择了任何单选按钮PrototypeJS使它变得非常容易。

这是一个函数,如果在页面上的某处至少选择了一个单选按钮,它将返回 true。同样,这可能需要根据您的特定 HTML 进行调整。

function atLeastOneRadio() {
    return ($('input[type=radio]:checked').size() > 0);
}

对于服务器端验证(请记住,您不能完全依赖 Javascript 进行验证!),这取决于您选择的语言,但您只需要检查gender请求字符串值。

我真的不明白你在说什么?是否对是否选择了任何单选按钮感兴趣?
2021-03-11 13:17:47
我已经修改了我的 Prototype 示例以利用我刚刚从 R. Bemrose 学到的 CSS 选择器课程。
2021-03-15 13:17:47
if (document.getElementById('gender_Male').checked || document.getElementById('gender_Female').checked) alert('我的一些radioboxes被检查');
2021-03-25 13:17:47
但是我想检查是否选择了单选按钮,而不管选择了什么。
2021-04-06 13:17:47
是的。因为如果没有填写所有字段(包括单选按钮),则无法提交表单。
2021-04-08 13:17:47

使用jQuery,它就像

if ($('input[name=gender]:checked').length > 0) {
    // do something here
}

让我把它分解成几部分以更清楚地说明它。jQuery 从左到右处理事物。

input[name=gender]:checked
  1. input 将其限制为输入标签。
  2. [name=gender] 将其限制为前一组中具有名称性别的标签。
  3. :checked 将其限制为在上一组中选择的复选框/单选按钮。

如果您想完全避免这种情况,请checked="checked"在 HTML 代码中将其中一个单选按钮标记为选中 ( ),这将保证始终选择一个单选按钮。

@RiccardoGalli:很多人已经在使用 jQuery,因此为什么答案以“使用 jQuery,它会像”开头,以防他们已经在使用它。
2021-03-14 13:17:47
任何人都知道是否可以像这样链接选择器?input[name=gender][type=radio] 或 input[name=gender,type=radio] 只是为了额外的验证?
2021-03-22 13:17:47
@EW-CodeMonkey 你提到的第一种方法应该有效
2021-03-27 13:17:47
-1 用于在不需要时提议图书馆。这样我们就可以用“包含库 x,使用 x.doWhatYouNeed()”来回答所有问题。没有火焰的意图,我真的认为这个问题应该用纯 javascript 来回答(然后最终指出使用库是多么容易)
2021-04-02 13:17:47

一种普通的 JavaScript 方式

var radios = document.getElementsByTagName('input');
var value;
for (var i = 0; i < radios.length; i++) {
    if (radios[i].type === 'radio' && radios[i].checked) {
        // get value, set checked flag or do whatever you need to
        value = radios[i].value;       
    }
}
@RussCam 是的,这适用于只有 2 个单选按钮的小页面,但我添加了我的评论以使答案完整。获取单选按钮元素的最佳方法是通过name.
2021-03-10 13:17:47
更好的方法是按特定类选择无线电元素,然后将不同的无线电元素组分组到不同的类中。否则,这种解决方案仅适用于没有其他输入表单元素的一组无线电元素。
2021-03-17 13:17:47
@styfle 这适用于 OP 的问题,他指出页面上的表单中只有两个单选按钮。对于不同的问题场景,例如两个以上的单选按钮、多个单选组等,解决方案会有所不同:)
2021-03-20 13:17:47
好吧,我现在遇到了几乎相同的问题,您的代码非常有帮助
2021-03-21 13:17:47
这将为您提供上次选中的单选按钮的值。如果您有多个无线电组,那么这可能不会为您提供正确的值。
2021-04-08 13:17:47

只是试图通过在 vanilla JavaScript 中加入一些 CSS 选择器糖来改进Russ Cam 的解决方案

var radios = document.querySelectorAll('input[type="radio"]:checked');
var value = radios.length>0? radios[0].value: null;

这里并不真正需要 jQuery,querySelectorAll 现在已经得到了足够的广泛支持。

编辑:修复了 css 选择器的一个错误,我已经包含了引号,虽然你可以省略它们,但在某些情况下你不能,所以最好把它们留在里面。

+1 为 Vanilla JavaScript。我总是在属性值周围使用引号,因为对于其他一些属性值(例如a[href^="http://"]),它们是必需的,并且一致性更易于维护。此外,这让属性声明与相应的 HTML 匹配。
2021-03-27 13:17:47
@ShafiqurRahman 你说得对,我会更新我的答案,我认为你不需要广播中的引号。
2021-03-31 13:17:47
可能应该是 var radios = document.querySelectorAll('input[type="radio"]:checked');
2021-04-05 13:17:47

您可以使用这个简单的脚本。您可能有多个具有相同名称和不同值的单选按钮

var checked_gender = document.querySelector('input[name = "gender"]:checked');

if(checked_gender != null){  //Test if something was checked
alert(checked_gender.value); //Alert the value of the checked.
} else {
alert('Nothing checked'); //Alert, nothing was checked.
}
我支持@Bharata 所说的,这是迄今为止最好的答案。简洁、正确、最新。
2021-03-28 13:17:47
+1。这是最短的 Vanilla JS 解决方案,用于获取已检查的无线电元素,这是我们在某些情况下所需要的。我认为你有最好的答案,因为这个。为了获得value,我们可以使用document.forms[0].elements['nameOfRadioList'].value
2021-04-03 13:17:47