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

时间:2009-09-14 20:35:11

标签: javascript

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

28 个答案:

答案 0 :(得分:311)

让我们假装你有像这样的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
}

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


如果您只是想查看页面上是否 ,<{3}}会让您感觉非常轻松。

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

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

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

答案 1 :(得分:103)

使用jQuery,它就像

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

让我把它分解成碎片,以便更清楚地覆盖它。 jQuery从左到右处理事务。

input[name=gender]:checked
  1. input将其限制为输入标记。
  2. [name=gender]将其限制为上一组中名为gender的代码。
  3. :checked将其限制为在上一组中选择的复选框/单选按钮。
  4. 如果您想完全避免这种情况,请在HTML代码中将其中一个单选按钮标记为选中(checked="checked"),这样可以保证始终选中一个单选按钮。

答案 2 :(得分:75)

一种香草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;       
    }
}

答案 3 :(得分:14)

尝试使用vanilla JavaScript引入一些CSS选择器糖来改进Russ Cam's solution

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

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

编辑:修复了css选择器的错误,我已经包含了引号,虽然你可以省略它们,在某些情况下你不能这样做最好留下他们。

答案 4 :(得分: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");
}

答案 5 :(得分: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脚本将确保为&#39; test1&#39;提供答案。和&#39; test2&#39;在它提交之前。您可以在表单中包含任意数量的无线电组,它将忽略任何其他表单元素。所有丢失的无线电答案将显示在单个警报弹出窗口内。在这里,我希望它能帮助人们。任何错误修复或有用的修改欢迎:)

<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 :(得分:7)

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

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

答案 7 :(得分: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()没有像你期望的那样返回无线电输入的检查值 - 它返回第一个单选按钮的值。

答案 8 :(得分: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;
            }
        }
    }

答案 9 :(得分: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 });

答案 10 :(得分:3)

使用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)

答案 11 :(得分:2)

我使用了spread operatorsome来检查数组中的至少一个元素是否通过了测试。

我分享关注的人。

std::string
var checked = [...document.getElementsByName("gender")].some(c=>c.checked);
console.log(checked);

答案 12 :(得分:2)

if(document.querySelectorAll('input[type="radio"][name="name_of_radio"]:checked').length < 1)

答案 13 :(得分: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 "";
}

答案 14 :(得分:1)

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

例如:

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

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

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

答案 15 :(得分: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>

答案 16 :(得分:0)

  

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

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

答案 17 :(得分:0)

您可以通过一种非常复杂的方法来验证是否使用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);
如果选中了某些单选按钮,则

isAnyRadioButtonChecked将是true,如果未选中任何一个,则将是false

答案 18 :(得分: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;
}

答案 19 :(得分:0)

尝试

[...myForm.sex].filter(r=>r.checked)[0].value

function check() {
  let v= ([...myForm.sex].filter(r=>r.checked)[0] || {}).value ;
  console.log(v);
}
<form id="myForm">
  <input name="sex" type="radio" value="men"> Men
  <input name="sex" type="radio" value="woman"> Woman
</form>
<br><button onClick="check()">Check</button>

答案 20 :(得分:0)

这也有效,避免调用元素id但是使用它作为数组元素。

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

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

答案 21 :(得分:0)

如果您想要使用vanilla 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,您可以将上面的相关行更改为:{ {1}})。

还有前瞻性的polyfill方法,因为RadioNodeList接口应该可以很容易地在表格子无线电元素列表中使用}).pop() || {value:false}).value;属性(在上面的代码中找到{ {1}}),但这有其自身的问题:How to polyfill RadioNodeList?

答案 22 :(得分: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;
}

答案 23 :(得分:0)

表格

<form name="teenageMutant">
  <input type="radio" name="ninjaTurtles"/>
</form>

脚本

if(!document.teenageMutant.ninjaTurtles.checked){
  alert('get down');
}

小提琴:http://jsfiddle.net/PNpUS/

答案 24 :(得分: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; 
} 

答案 25 :(得分:0)

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

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

请记住在每个单选按钮的表单中设置id('radio1','radio2'或其他任何名称),否则脚本将无效。

答案 26 :(得分:0)

对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>

和用于检查是否已选中单选按钮的Javascript代码

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

答案 27 :(得分:-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;
   }
}