通过JavaScript检查单选按钮组的值?


74

这看起来很愚蠢和愚蠢,但是我似乎无法弄清楚如何通过JavaScript检查HTML表单中单选按钮组的值。我有以下代码:

<input type="radio" id="genderm" name="gender" value="male" />
<label for="genderm">Male</label>
<input type="radio" id="genderf" name="gender" value="female" />
<label for="genderf">Female</label>

如何gender通过JavaScript检索值?

Answers:


72

如果您使用的是jQuery之类的JavaScript库,则非常简单:

alert($('input[name=gender]:checked').val());

此代码将选择checked具有gender名称的输入,并得到它value。是不是很简单?

现场演示


69
问题是“ Javascript”,而不是“ jQuery”。
MattiSG'2

3
@MattiSG,因为它已被接受,所以我认为它对发问者(和许多其他人)有所帮助...
gdoron支持Monica

10
好吧,我遇到了一个寻找Javascript解决方案的问题,该问题未标记为jQuery,当我阅读该问题时未提及jQuery,我认为公认的答案不应该依赖jQuery。但是,那
才是

检查@darelf的答案纯js .. !!
Bino Kochumol Varghese'7

那时的jQuery还可以。
user2422869

230

如果要避免使用框架(我几乎总是想这样做),请使用document.querySelector()。

document.querySelector('input[name="gender"]:checked').value

15
这需要更多的支持,.querySelector()是对许多jQuery问题的有效回答……
玛丽安

3
这是我从未有过的第一次登录,只是为了给某人投票。
误解的时间为

@误解在这里一样。必须登录对此进行投票
Courtney

3
这个答案使我很抱歉,社区或主持人以后无法更改问题的答案。当然,要充分尊重所选答案(针对参与该决策的两个人)。
Axonn

93

用纯Javascript:

var genders = document.getElementsByName("gender");
var selectedGender;

for(var i = 0; i < genders.length; i++) {
   if(genders[i].checked)
       selectedGender = genders[i].value;
 }

更新

在无循环的纯Javascript中,使用较新的(可能尚不支持)RadioNodeList

var form_elements = document.getElementById('my_form').elements;
var selectedGender = form_elements['gender'].value;

唯一的问题RadioNodeList是只能由HTMLFormElement.elementsHTMLFieldSetElement.elements属性返回,因此您必须具有用于包装无线电输入的表单或字段集的某些标识符才能首先捕获它。


42
再加上一个用于回答标题而不提供jQuery答案的方法。
driechel

9

要获得价值,您可以这样做:

document.getElementById("genderf").value;

但是要检查是否选中或选中了单选按钮:

document.getElementById("genderf").checked;

1
那不是问题。ID由于您不知道ID,或者您可能有无数的单选按钮,但是您想知道哪个值将被发送到服务器(组的选定值),因此无法在此处使用。因此,此答案并不能真正回答问题
vsync

@vsync不确定您的意思,OP对服务器一无所知,并询问(1)他的标题中如何检查值,以及(2)如何检索值,我都根据OP的代码回答了这两个问题提供。
gideon '16

我发现我没有很好地解释它:您提出的建议永远不会奏效,甚至没有任何意义。您绝对不能getElementById在这种情况下使用。看到这个答案
vsync 2016年

ID出现的问题,同时所获得的价值,我有两个名称相同的ID它得到的值只有第一个ID没有第二个
ßãlãjî

3

尝试:


var selectedVal;

for( i = 0; i < document.form_name.gender.length; i++ )
{
  if(document.form_name.gender[i].checked)
    selectedVal = document.form_name.gender[i].value; //male or female
    break;
  }
}


3

如果将表单元素包装在具有名称属性的表单标记中,则可以使用document.formName.radioGroupName.value轻松获取值。

<form name="myForm">
    <input type="radio" id="genderm" name="gender" value="male" />
    <label for="genderm">Male</label>
    <input type="radio" id="genderf" name="gender" value="female" />
    <label for="genderf">Female</label>
</form>

<script>
    var selected = document.forms.myForm.gender.value;
</script>

这似乎存在跨浏览器问题。
jfriend00

这似乎在Chrome中也不再起作用。我敢肯定它曾经做过一次。:(
克里斯·史密斯

你忘了.forms.elements!所以应该是document.forms.myForm.gender.value
Kal

您的答案似乎比其他人的感谢要容易得多:)。
利亚姆

0

无循环:

document.getElementsByName('gender').reduce(function(value, checkable) {
    if(checkable.checked == true) 
        value = checkable.value; 
    return value;
}, '');

reduce 只是一个函数,它将按顺序将数组元素提供给回调的第二个参数,并将先前返回的函数提供给value,而对于第一次运行,它将使用第二个参数的值。

这种方法的唯一缺点是,getElementsByName即使在找到选定的单选按钮后,reduce也将遍历返回的每个元素。


-1

function myFunction() {
document.getElementById("text").value='male'
 document.getElementById("myCheck_2").checked = false;
  var checkBox = document.getElementById("myCheck");
  var text = document.getElementById("text");
  if (checkBox.checked == true){
    text.style.display = "block";
  } else {
     text.style.display = "none";
  }
}
function myFunction_2() {
document.getElementById("text").value='female'
 document.getElementById("myCheck").checked = false;
  var checkBox = document.getElementById("myCheck_2");
  var text = document.getElementById("text");
  if (checkBox.checked == true){
    text.style.display = "block";
  } else {
     text.style.display = "none";
  }
}
Male: <input type="checkbox" id="myCheck"  onclick="myFunction()">
Female: <input type="checkbox" id="myCheck_2"  onclick="myFunction_2()">

<input type="text" id="text" placeholder="Name">

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.