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


Answers:


330

假设您有这样的HTML

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

对于客户端验证,以下是一些Java脚本,用于检查选择了哪一个:

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

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


1
但是我想检查是否选择了单选按钮,而不管选择了什么。
noob

1
我真的听不懂你在说什么?对是否选择任何单选按钮感兴趣?
Mark Biek 09年

是。因为如果不是所有字段(包括单选按钮)都被填写,则无法提交表单。
noob

如果(document.getElementById('gender_Male')。checked || document.getElementById('gender_Female')。checked)警报('我的某些单选框已选中');
Havenard

我已经修改了Prototype示例,以利用我刚刚从R. Bemrose中学到的CSS选择器课程。
Mark Biek 09年

111

使用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代码中将其中一个单选按钮标记为选中(),这样可以确保始终选择一个单选按钮。


16
-1,用于在未提出要求时提议一个库。这样,我们可以用“包括库x,使用x.doWhatYouNeed()”来回答所有问题。没有火焰,我真的认为这个问题应该用纯JavaScript回答(然后最终指出使用库是多么容易)
Riccardo Galli 2012年

23
@RiccardoGalli:很多人已经在使用jQuery,因此,如果他们已经在使用jQuery,为什么答案会以“使用jQuery开头”。
Powerlord 2012年

1
有人知道是否可以像这样链接选择器吗?输入[名称=性别] [类型=无线电]或输入[名称=性别,类型=无线电]仅用于额外验证?
Ty_

@ EW-CodeMonkey您提到的第一种方法应该起作用
Powerlord

81

普通的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;       
    }
}

2
好吧,我现在遇到了几乎相同的问题,您的代码非常有帮助
MoreThanChaos

2
这将为您获取最后检查的单选按钮的值。如果您有多个无线电组,则可能无法获得正确的值。
styfle 2012年

@styfle对于OP的问题,当他指出页面上的表单中只有两个单选按钮时,此方法很好用。对于不同的问题情况,例如两个以上的单选按钮,多个单选组等,解决方案将有所不同:)
Russ Cam

2
@RussCam是的,这仅适用于只有2个单选按钮的小页面,但是我添加了评论以使答案完整。获取单选按钮元素的最佳方法是name
styfle 2012年

更好的方法是按特定类别选择无线电元素,然后将不同组的无线电元素分组为不同的类别。否则,这种解决方案将仅适用于一组无线电元素,而没有其他输入表单元素。
奥利弗(Oliver)

15

只是尝试通过在原始JavaScript中添加一些CSS选择器糖来改进Russ Cam的解决方案

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

这里并不需要jQuery,现在已经足够广泛地支持querySelectorAll了。

编辑:修复了css选择器的错误,尽管您可以省略引号,但我已经包括了引号,但在某些情况下则不能,因此最好将其保留。


可能应该是var radios = document.querySelectorAll('input [type =“ radio”]:checked');
沙菲古尔·拉曼(Ms. Shafiqur Ra​​hman)

@ShafiqurRahman,您说的很对,我将更新我的答案,我认为您不需要收音机周围的引号。
马特·麦凯布

3
+1适用于Vanilla JavaScript。我将始终在属性值周围使用引号,因为对于某些其他属性值(例如a[href^="http://"]),将需要使用引号,并且一致性更易于维护。此外,这使属性声明与相应的HTML匹配。
曼戈

11

HTML代码

<input type="radio" name="offline_payment_method" value="Cheque" >
<input type="radio" name="offline_payment_method" value="Wire Transfer" >

JavaScript代码:

var off_payment_method = document.getElementsByName('offline_payment_method');
var ischecked_method = false;
for ( var i = 0; i < off_payment_method.length; i++) {
    if(off_payment_method[i].checked) {
        ischecked_method = true;
        break;
    }
}
if(!ischecked_method)   { //payment method button is not checked
    alert("Please choose Offline Payment Method");
}

2
警告:此代码会在页面加载后立即返回弹出警告。
samthebrand

10

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

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.
}

9

此页面中的脚本帮助我提出了以下脚本,我认为它更完整,更通用。基本上,它将验证表单中任意数量的单选按钮,这意味着它将确保为表单中每个不同的单选按钮组选择一个单选选项。例如在下面的测试表中:

   <form id="FormID">

    Yes <input type="radio" name="test1" value="Yes">
    No <input type="radio" name="test1" value="No">

    <br><br>

    Yes <input type="radio" name="test2" value="Yes">
    No <input type="radio" name="test2" value="No">

   <input type="submit" onclick="return RadioValidator();">

RadioValidator脚本将确保在提交“ test1”和“ test2”之前均已给出答案。您可以在表单中拥有尽可能多的单选组,它将忽略任何其他表单元素。所有丢失的单选答案将显示在单个警报弹出窗口内。希望它能对人们有所帮助。任何错误修复或有用的修改,欢迎:)

<SCRIPT LANGUAGE="JAVASCRIPT">
function RadioValidator()
{
    var ShowAlert = '';
    var AllFormElements = window.document.getElementById("FormID").elements;
    for (i = 0; i < AllFormElements.length; i++) 
    {
        if (AllFormElements[i].type == 'radio') 
        {
            var ThisRadio = AllFormElements[i].name;
            var ThisChecked = 'No';
            var AllRadioOptions = document.getElementsByName(ThisRadio);
            for (x = 0; x < AllRadioOptions.length; x++)
            {
                 if (AllRadioOptions[x].checked && ThisChecked == 'No')
                 {
                     ThisChecked = 'Yes';
                     break;
                 } 
            }   
            var AlreadySearched = ShowAlert.indexOf(ThisRadio);
            if (ThisChecked == 'No' && AlreadySearched == -1)
            {
            ShowAlert = ShowAlert + ThisRadio + ' radio button must be answered\n';
            }     
        }
    }
    if (ShowAlert != '')
    {
    alert(ShowAlert);
    return false;
    }
    else
    {
    return true;
    }
}
</SCRIPT>

6

在获取单选输入值时,请注意此行为与jQuery:

$('input[name="myRadio"]').change(function(e) { // Select the radio input group

    // This returns the value of the checked radio button
    // which triggered the event.
    console.log( $(this).val() ); 

    // but this will return the first radio button's value,
    // regardless of checked state of the radio group.
    console.log( $('input[name="myRadio"]').val() ); 

});

因此$('input[name="myRadio"]').val(),不像您期望的那样返回单选按钮的检查值-它返回第一个单选按钮的值。


4

使用mootools(http://mootools.net/docs/core/Element/Element

的HTML:

<input type="radio" name="radiosname" value="1" />
<input type="radio" name="radiosname" value="2" id="radiowithval2"/>
<input type="radio" name="radiosname" value="3" />

js:

// Check if second radio is selected (by id)
if ($('radiowithval2').get("checked"))

// Check if third radio is selected (by name and value)
if ($$('input[name=radiosname][value=3]:checked').length == 1)


// Check if something in radio group is choosen
if ($$('input[name=radiosname]:checked').length > 0)


// Set second button selected (by id)
$("radiowithval2").set("checked", true)

//检查是否选择了单选组中的某项是否正是我需要的($$('input [name = radiosname]:checked')。length> 0)
Steve Johnson

3

这是我为解决此问题而创建的实用程序功能

    //define radio buttons, each with a common 'name' and distinct 'id'. 
    //       eg- <input type="radio" name="storageGroup" id="localStorage">
    //           <input type="radio" name="storageGroup" id="sessionStorage">
    //param-sGroupName: 'name' of the group. eg- "storageGroup"
    //return: 'id' of the checked radioButton. eg- "localStorage"
    //return: can be 'undefined'- be sure to check for that
    function checkedRadioBtn(sGroupName)
    {   
        var group = document.getElementsByName(sGroupName);

        for ( var i = 0; i < group.length; i++) {
            if (group.item(i).checked) {
                return group.item(i).id;
            } else if (group[0].type !== 'radio') {
                //if you find any in the group not a radio button return null
                return null;
            }
        }
    }

1
之所以这样,是因为其(可重用)性和简单性。同样,可以通过一个不错的switch语句来处理返回的值。
JGurtz 2014年

3

这对于共享相同名称的单选按钮有效,不需要JQuery。

var x = Array.prototype.filter.call(document.getElementsByName('checkThing'), function(x) { return x.checked })[0];

如果我们正在谈论复选框,并且我们想要一个列表,其中选中的复选框共享一个名称:

var x = Array.prototype.filter.call(document.getElementsByName('checkThing'), function(x) { return x.checked });


2

对Mark Biek只是一点修改;

HTML代码

<form name="frm1" action="" method="post">
  <input type="radio" name="gender" id="gender_Male" value="Male" />
  <input type="radio" name="gender" id="gender_Female" value="Female" / >
  <input type="button" value="test"  onclick="check1();"/>
</form>

和Java代码检查单选按钮是否被选中

<script type="text/javascript">
    function check1() {            
        var radio_check_val = "";
        for (i = 0; i < document.getElementsByName('gender').length; i++) {
            if (document.getElementsByName('gender')[i].checked) {
                alert("this radio button was clicked: " + document.getElementsByName('gender')[i].value);
                radio_check_val = document.getElementsByName('gender')[i].value;        
            }        
        }
        if (radio_check_val === "")
        {
            alert("please select radio button");
        }        
    }
</script>

1
getElementsByName()返回一个HTMLCollection,它没有选中的属性,所以我不认为您发布的JavaScript代码段可以按预期工作。您必须遍历HTMLCollection中的元素,并查看是否已检查其他元素(如其他建议)。
鲁迪2012年

谢谢。您是正确的。:)更新了我的回复,因此没有更多的人得到错误的信息。
Parag

2

您可以通过一种非常复杂的方法来验证是否使用ECMA6和方法检查了任何单选按钮 .some()

HTML:

<input type="radio" name="status" id="marriedId" value="Married" />
<input type="radio" name="status" id="divorcedId" value="Divorced" />

和javascript:

let htmlNodes = document.getElementsByName('status');

let radioButtonsArray = Array.from(htmlNodes);

let isAnyRadioButtonChecked = radioButtonsArray.some(element => element.checked);

isAnyRadioButtonCheckedtrue如果某些单选按钮的检查和false如果两者都没有被选中。


2

返回单选按钮中所有选中的元素

  Array.from(document.getElementsByClassName("className")).filter(x=>x['checked']);

1

http://www.somacon.com/p143.php/

function getCheckedValue(radioObj) {
    if(!radioObj)
        return "";
    var radioLength = radioObj.length;
    if(radioLength == undefined)
        if(radioObj.checked)
            return radioObj.value;
        else
            return "";
    for(var i = 0; i < radioLength; i++) {
        if(radioObj[i].checked) {
            return radioObj[i].value;
        }
    }
    return "";
}

1

使用JQuery,检查单选按钮当前状态的另一种方法是获取属性“ checked”。

例如:

<input type="radio" name="gender_male" value="Male" />
<input type="radio" name="gender_female" value="Female" />

在这种情况下,您可以使用以下方法检查按钮:

if ($("#gender_male").attr("checked") == true) {
...
}

1
就我而言,value $("#gender_male").attr("checked")是一个字符串,"checked"而不是布尔值。
Koks_rs

1

提交表单后,此代码将提醒选定的单选按钮。它使用jQuery获取选定的值。

$("form").submit(function(e) {
  e.preventDefault();
  $this = $(this);

  var value = $this.find('input:radio[name=COLOR]:checked').val();
  alert(value);
});
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<form>
  <input name="COLOR" id="Rojo" type="radio" value="red">
  <input name="COLOR" id="Azul" type="radio" value="blue">
  <input name="COLOR" id="Amarillo" type="radio" value="yellow">
  <br>
  <input type="submit" value="Submit">
</form>


1

我使用了传播算子一些检查数组中的至少一个元素是否通过了测试。

我分享对谁的关注。

var checked = [...document.getElementsByName("gender")].some(c=>c.checked);
console.log(checked);
<input type="radio" name="gender" checked value="Male" />
<input type="radio" name="gender"  value="Female" / >


0

这是扩展的解决方案,可以不继续提交,如果未选中单选按钮,则发送警报。当然,这意味着您必须首先取消选中它们!

if(document.getElementById('radio1').checked) {
} else if(document.getElementById('radio2').checked) {
} else {
  alert ("You must select a button");
  return false;
}

只需记住在表单中为每个单选按钮设置id(“ radio1”,“ radio2”或您所谓的名称),否则脚本将不起作用。


您可以简单地做到:if (!document.getElementById('radio1').checked && !document.getElementById('radio2').checked) { alert(); }
插入用户名

0

一个例子:

if (!checkRadioArray(document.ExamEntry.level)) { 
    msg+="What is your level of entry? \n"; 
    document.getElementById('entry').style.color="red"; 
    result = false; 
} 

if(msg==""){ 
    return result;  
} 
else{ 
    alert(msg) 
    return result;
} 

function Radio() { 
    var level = radio.value; 
    alert("Your level is: " + level + " \nIf this is not the level your taking then please choose another.") 
} 

function checkRadioArray(radioButtons) { 
    for(var r=0;r < radioButtons.length; r++) { 
        if (radioButtons[r].checked) { 
            return true; 
        } 
    } 
    return false; 
} 


0

我只想确保选择某些东西(使用jQuery):

// html
<input name="gender" type="radio" value="M" /> Male <input name="gender" type="radio" value="F" /> Female

// gender (required)
var gender_check = $('input:radio[name=gender]:checked').val();
if ( !gender_check ) {
    alert("Please select your gender.");
    return false;
}

0

如果您想要普通的JavaScript,不想在每个单选按钮上添加ID来打乱您的标记,而只关心现代浏览器,那么以下功能方法对我来说比for循环更有趣:

<form id="myForm">
<label>Who will be left?
  <label><input type="radio" name="output" value="knight" />Kurgan</label>
  <label><input type="radio" name="output" value="highlander" checked />Connor</label>
</label>
</form>

<script>
function getSelectedRadioValue (formElement, radioName) {
    return ([].slice.call(formElement[radioName]).filter(function (radio) {
        return radio.checked;
    }).pop() || {}).value;
}

var formEl = document.getElementById('myForm');
alert(
   getSelectedRadioValue(formEl, 'output') // 'highlander'
)
</script>

如果两者均未选中,它将返回undefined(尽管您可以将上面的行更改为返回其他内容,例如要false返回,则可以将上面的相关行更改为:}).pop() || {value:false}).value;

RadioNodeList以来,还有前瞻性的polyfill方法接口应该可以轻松使用value表单子单选元素列表中的一个属性(在上述代码中以形式找到formElement[radioName]),但这有其自身的问题:如何polyfill RadioNodeList ?


0

这也是可行的,避免调用元素id,而是将其用作数组元素。

以下代码基于以下事实:一个名为radiobuttons组的数组由radiobuttons元素组成,其排列顺序与html文档中声明的顺序相同:

if(!document.yourformname.yourradioname[0].checked 
   && !document.yourformname.yourradioname[1].checked){
    alert('is this working for all?');
    return false;
}

0

HTML:

<label class="block"><input type="radio" name="calculation" value="add">+</label>
<label class="block"><input type="radio" name="calculation" value="sub">-</label>
<label class="block"><input type="radio" name="calculation" value="mul">*</label>
<label class="block"><input type="radio" name="calculation" value="div">/</label>

<p id="result"></p>

JAVAScript:

var options = document.getElementsByName("calculation");

for (var i = 0; i < options.length; i++) {
    if (options[i].checked) {
        // do whatever you want with the checked radio
        var calc = options[i].value;
        }
    }
    if(typeof calc == "undefined"){
        document.getElementById("result").innerHTML = " select the operation you want to perform";
        return false;
}

-2

提供单选按钮,名称相同,但ID不同。

var verified1 = $('#SOME_ELEMENT1').val();
var verified2 = $('#SOME_ELEMENT2').val();
var final_answer = null;
if( $('#SOME_ELEMENT1').attr('checked') == 'checked' ){
  //condition
  final_answer = verified1;
}
else
{
  if($('#SOME_ELEMENT2').attr('checked') == 'checked'){
    //condition
    final_answer = verified2;
   }
   else
   {
     return false;
   }
}
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.