我们如何使用 DOM 访问单选按钮的值?
例如。我们有单选按钮:
<input name="sex" type="radio" value="male">
<input name="sex" type="radio" value="female">
它们位于带有 name 的表单中form1
。当我尝试
document.getElementByName("sex").value
无论检查值如何,它总是返回“男性”。
我们如何使用 DOM 访问单选按钮的值?
例如。我们有单选按钮:
<input name="sex" type="radio" value="male">
<input name="sex" type="radio" value="female">
它们位于带有 name 的表单中form1
。当我尝试
document.getElementByName("sex").value
无论检查值如何,它总是返回“男性”。
只是为了“生成” Canavar 非常有用的功能:
function getRadioValue(theRadioGroup)
{
var elements = document.getElementsByName(theRadioGroup);
for (var i = 0, l = elements.length; i < l; i++)
{
if (elements[i].checked)
{
return elements[i].value;
}
}
}
...现在将这样引用:
getRadioValue('sex');
奇怪的是,这样的东西还不是prototype.js的一部分。
如果您需要选择一个,大多数框架都支持这样的功能:
//jQuery
$("input[name='sex']:checked").val()
有几种方法。
<input name="sex" id="sex_male" type="radio" value="male">
<input name="sex" id="sex_female" type="radio" value="female">
然后你可以使用document.getElementById("sex_male")
然后你可以做这样的事情:
//This loops over all input elements that have a name of "sex"
$$('input[name="sex"]').each( function(elem) {
//Do something
});
或者甚至只是为了获得“男性”单选按钮:
$$('input[name="sex"][value="male"]').each(function(elem) {
//Do something
});
开始使用Prototype的一种简单方法是通过在页面的 <head></head> 标记之间添加它来从 Google 包含它:
<script type="text/javascript" src="http://ajax.googleapis.com/ajax/libs/prototype/1.6.0.3/prototype.js"></script>
您可以通过此方法获取所选收音机的值:
<script>
function getRadioValue()
{
for (var i = 0; i < document.getElementsByName('sex').length; i++)
{
if (document.getElementsByName('sex')[i].checked)
{
return document.getElementsByName('sex')[i].value;
}
}
}
</script>
如果您想要选择一个,但手边没有框架,您可以遍历元素数组以查找选中的那个:
for (var i = 0; i < document.form1.sex.length; i++) {
if (document.form1.sex[i].checked) alert(document.form1.sex[i].value);
}
如果使用document.form1.sex
,则会返回一个数组。
document.form1.sex[0]
= 第一个单选按钮
document.form1.sex[1]
= 第二个单选按钮
要检查哪个已检查,您需要循环:
whoChecked(document.form1.sex)
function whoChecked(fieldName) {
for(var x=0;x<fieldName.length;x++) {
if(fieldName[x].checked) {
return fieldname[x].value
}
}
var list = document.getElementsByName('sex');
for(var i=0;i<list.length;i++){
if(list[i].type=='radio' && list[i].checked){
alert(list[i].value);
break;
}
}
document.getElementByName("sex").value
你的意思是getElementsByName('sex')[0].value
?(没有getElementByName
。)
当然,这总是会选择第一个具有该名称的输入元素——其值确实是男性。然后,您可以使用“.checked”属性检查它是否被选中。
对于这个简单的案例,您可以摆脱:
var sex= document.getElementsByName("sex")[0].checked? 'male' : 'female';
对于一般情况,您必须遍历每个无线电输入以查看哪个被检查。首先获取表单对象可能会更好(在表单上放置一个id并使用document.getElementById
通常比使用基于'name'的document.forms集合更好),然后访问form.elements.sex来获取列表,如果页面上有任何其他元素具有name="sex"
属性(可能是表单字段以外的其他元素)。
function getEleByName(){
if(true==document.getElementsByName('gender')[0].checked){
alert('selected gender is: male');
}
else{
alert('selected gender is: female');
}
}
正如其他人所展示的那样,循环可以完成任务,但它可能比使用循环更简单,如果需要,这将有助于提高性能。此外,它可以是便携式/模块化的,因此可以用于不同的无线电组。
简单示例
function getValue(x) {
alert(x.value);
}
<input name="sex" type="radio" value="male" onChange="getValue(this)" />
<input name="sex" type="radio" value="female" onChange="getValue(this)" />
一个更复杂的例子:
function getValue(x){
alert(x.value);
}
<fieldset>
<legend>Sex</legend>
<label>Male:
<input name="sex" type="radio" value="male" onChange="getValue(this)"/>
</label>
<label>Female:
<input name="sex" type="radio" value="female" onChange="getValue(this)" />
</label>
</fieldset>
<fieldset>
<legend>Age Group</legend>
<label>0-13:
<input name="ageGroup" type="radio" value="0-13" onChange="getValue(this)" />
</label>
<label>13-18:
<input name="ageGroup" type="radio" value="13-18" onChange="getValue(this)" />
</label>
<label>18-30:
<input name="ageGroup" type="radio" value="13-18" onChange="getValue(this)" />
</label>
<label>30+:
<input name="ageGroup" type="radio" value="13-18" onChange="getValue(this)" />
</label>
</fieldset>