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

Posted

技术标签:

【中文标题】如何检查是不是使用 JavaScript 选择了单选按钮?【英文标题】:How can I check whether a radio button is selected with JavaScript?如何检查是否使用 JavaScript 选择了单选按钮? 【发布时间】:2022-01-15 09:12:16 【问题描述】:

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

【问题讨论】:

此链接可能对您有所帮助***.com/questions/6654601/… 【参考方案1】:

假设你有这样的 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

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


如果您只是想查看页面上的any单选按钮是否在anywhere被选中,PrototypeJS 会非常简单。

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

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


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

【讨论】:

但是无论选择什么,我都想检查是否选择了单选按钮。 我真的不明白你在说什么?是否对是否选择了任何单选按钮感兴趣? 是的。因为如果没有填写所有字段(包括单选按钮),则无法提交表单。 if (document.getElementById('gender_Male').checked || document.getElementById('gender_Female').checked) alert('我的一些单选框被选中'); 我已经修改了我的原型示例,以利用我刚刚从 R. Bemrose 学到的 CSS 选择器课程。【参考方案2】:

jQuery 会是这样的

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

让我把它分解成几块,以便更清楚地涵盖它。 jQuery 从左到右处理事情。

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

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

【讨论】:

-1 用于在未请求时提出库。这样我们就可以用“include library x, use x.doWhatYouNeed()”来回答所有问题。无意冒火,我真的认为应该用纯 javascript 来回答这个问题(然后最终指出使用库是多么容易) @RiccardoGalli:很多人已经在使用 jQuery,因此如果他们已经在使用它,为什么答案会以“使用 jQuery,它会是类似的东西”开头。 有人知道是否可以像这样链接选择器吗? input[name=gender][type=radio] 或 input[name=gender,type=radio] 只是为了额外的验证? @EW-CodeMonkey 你提到的第一种方式should work。【参考方案3】:

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

【讨论】:

嗯,我现在遇到了几乎同样的问题,你的代码很有帮助 这将为您获取最后选中的单选按钮的值。如果您有多个无线电组,那么这可能无法为您提供正确的值。 @styfle 这适用于 OP 的问题,他指出页面上的表单中只有两个单选按钮。对于不同的问题场景,例如两个以上的单选按钮、多个单选组等,解决方案会有所不同:) @RussCam 是的,这适用于只有 2 个单选按钮的小页面,但我添加了评论以使答案完整。获取单选按钮元素的最佳方式是name 更好的方法是按特定类选择单选元素,然后将不同组的单选元素分组到不同的类中。否则,这个解决方案只适用于一组没有其他输入表单元素的单选元素。【参考方案4】:

只是尝试在 Russ Cam's solution 上添加一些 CSS 选择器糖与 vanilla JavaScript 一起改进。

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'); @ShafiqurRahman 你是绝对正确的,我会更新我的答案,我认为你不需要收音机周围的报价。 +1 用于原生 JavaScript。我总是在属性值周围使用引号,因为对于其他一些属性值(例如a[href^="http://"]),它们是必需的,并且一致性更易于维护。此外,这让属性声明匹配相应的 HTML。【参考方案5】:

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

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.

【讨论】:

+1。这是获取选中的 radio 元素的最短 Vanilla JS 解决方案,在某些情况下我们需要它。因此,我认为您有最好的答案。为了获得价值,我们可以使用document.forms[0].elements['nameOfRadioList'].value 我赞同@Bharata 所说的,这是迄今为止最好的答案。简洁、正确、最新。【参考方案6】:

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

【讨论】:

警告:此代码在页面加载后立即返回弹出警告。【参考方案7】:

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

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

【讨论】:

【参考方案8】:

使用 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) 正是我需要的,则检查是否选择了无线电组中的某些内容【参考方案9】:

在获取无线电输入值时注意 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() 不会像您预期的那样返回单选输入的检查值——它返回第一个单选按钮的值。

【讨论】:

【参考方案10】:

我使用spread operator 和some 来检查数组中的至少一个元素通过了测试。

我为谁担心。

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

【讨论】:

我喜欢你的回答@Hien Nguyen,这是我试图想出的东西(使用“any()”的想法,但我发现 JavaScript 只使用“some() ”。请有人告诉我“三点”是什么意思吗?没有它就行不通。【参考方案11】:

有一种非常复杂的方法可以验证是否使用 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

【讨论】:

【参考方案12】:

这是我为解决这个问题而创建的实用函数

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

【讨论】:

喜欢这个是因为它的(再)可用性和简单性。此外,返回值可以通过一个不错的 switch 语句来处理。【参考方案13】:

这对于共享相同名称的单选按钮有效,不需要 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 );

【讨论】:

【参考方案14】:
if(document.querySelectorAll('input[type="radio"][name="name_of_radio"]:checked').length < 1)

【讨论】:

【参考方案15】:

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

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

【讨论】:

【参考方案16】:

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

例如:

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

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

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

【讨论】:

在我的例子中,$("#gender_male").attr("checked") 的值是字符串 "checked" 而不是布尔值。【参考方案17】:

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

【讨论】:

getElementsByName() 返回一个 HTMLCollection,它没有选中的属性,所以我不相信您发布的 JavaScript sn-p 会按预期工作。正如其他人所建议的那样,您必须遍历 HTMLCollection 中的元素并查看是否检查了其中的任何一个。 谢谢。你是对的。:) 更新了我的回复,以免更多人得到错误信息。【参考方案18】:

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

【讨论】:

【参考方案19】:

此代码将在提交表单时提醒选中的单选按钮。它使用 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>

【讨论】:

【参考方案20】:

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;

【讨论】:

【参考方案21】:

这是扩展为不继续提交并在未选中单选按钮时发送警报的解决方案。当然,这意味着您必须一开始就取消选中它们!

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 &amp;&amp; !document.getElementById('radio2').checked) alert(); .【参考方案22】:

一个例子:

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; 
 

【讨论】:

【参考方案23】:

表格

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

脚本

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

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

【讨论】:

【参考方案24】:

我只想确保 something 被选中(使用 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;

【讨论】:

【参考方案25】:

如果你想要 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,您可以将上面的相关行更改为:).pop() || value:false).value;)。

还有前瞻性的 polyfill 方法,因为 RadioNodeList 接口应该可以很容易地在表单子单选元素列表中使用 value 属性(在上面的代码中找到为 formElement[radioName]),但这有其自身的问题:How to polyfill RadioNodeList?

【讨论】:

【参考方案26】:

这也有效,避免调用元素 id,而是将其作为数组元素调用。

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

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

【讨论】:

【参考方案27】:

试试

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

【讨论】:

【参考方案28】:

所以基本上这段代码所做的就是遍历一个包含所有输入元素的 nodeList。如果这些输入元素之一是radio 类型并且被检查然后打破循环并做一些事情。

如果循环没有检测到输入元素被选中,也做一些事情。

let inputs = document.querySelectorAll('input'),
    btn = document.getElementById('btn'),
    selected = false;

function check()
  for(const input of inputs)
    if(input.type === 'radio' && input.checked)
      console.log('You selected: ' + input.value) // Checked -> do something
      selected = true;
      break;
    
  
  !selected ? console.log("You didn't select any option") : null; // Non checked


btn.addEventListener('click', check)
  
<input type="radio" name="option" value="one"><label>One</label>
<br>
<input type="radio" name="option" value="two"><label>Two</label>
<br><br>
<button id="btn">Check selection</button>

【讨论】:

【参考方案29】:

提供单选按钮,名称相同但 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;
   

【讨论】:

以上是关于如何检查是不是使用 JavaScript 选择了单选按钮?的主要内容,如果未能解决你的问题,请参考以下文章

验证是不是通过javascript检查单选按钮[重复]

检查是不是选中了单选按钮jquery [重复]

如何确定是不是选中了单选按钮? [复制]

如果使用 PHP 选择了单选按钮(当前),如何在 Mysql 数据库中为出勤值添加 +1?

如果在 Sonata Admin 中选择了单选按钮,如何禁用单选按钮

如何检查请求是不是使用 JavaScript (Mocha) 发送