【问题标题】:How to get value of selected radio button?如何获取选定单选按钮的值?
【发布时间】:2013-03-28 04:16:10
【问题描述】:

我想从一组单选按钮中获取选定的值。

这是我的 HTML:

<div id="rates">
  <input type="radio" id="r1" name="rate" value="Fixed Rate"> Fixed Rate
  <input type="radio" id="r2" name="rate" value="Variable Rate"> Variable Rate
  <input type="radio" id="r3" name="rate" value="Multi Rate" checked="checked"> Multi Rate  
</div>

这是我的 js:

var rates = document.getElementById('rates').value;
var rate_value;
if(rates =='Fixed Rate'){
    rate_value = document.getElementById('r1').value;
    
}else if(rates =='Variable Rate'){
    rate_value = document.getElementById('r2').value;
    
}else if(rates =='Multi Rate'){
    rate_value = document.getElementById('r3').value;
}  

document.getElementById('results').innerHTML = rate_value;

我一直不确定。

【问题讨论】:

标签: javascript html radio-button


【解决方案1】:

这适用于 IE9 及更高版本以及所有其他浏览器。

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

【讨论】:

  • 当然,您必须检查 querySelector 是否返回 null。如果没有选中单选按钮,就会出现这种情况。
  • @KamranAhmed:您的 jQuery 解决方案的成本要高得多。
  • ParthikGosar:IE8 不支持 :checked 选择器。
  • 请注意,rate 两边的引号不是必需的。
  • @KamranAhmed 直到并且除非您可以分析上述内容和/或检查调用背后的实现,否则您不能说以上的性能,也不能说任何其他调用本机的 oneliner代码。我们没有足够的信息来推测浏览器如何设法找到:checked 元素——也许它已经“散列和缓存”了所有内容,这是一个O(1) 操作。除非您已对其进行分析以表明查询时间随着页面上元素数量的增加而增长,或者除非您了解其背后的浏览器源代码,否则您无法判断。
【解决方案2】:
var rates = document.getElementById('rates').value;

rates 元素是div,所以它没有值。这可能是undefined 的来源。

checked 属性会告诉你元素是否被选中:

if (document.getElementById('r1').checked) {
  rate_value = document.getElementById('r1').value;
}

或者

$("input[type='radio'][name='rate']:checked").val();

【讨论】:

  • 在 jquery 中应该是 $("input[name=rate]:checked").val()
  • @mzalazar 不,每个单选按钮都有自己的 ID,但都具有相同的名称,这就是将它们归为一组的原因,因此如果您选择一个,则另一个会被取消选择。使用 Kamran Ahmed 答案,您可以检查组中的哪些单选按钮被选中,并仅获取所选(选中)的单选按钮的值。
  • mahdavipanah 上面的代码(带有[checked])寻找属性(即初始状态)。您应该改用 :checked,它会查找 属性(即当前状态),这几乎总是您想要的。
  • 在 Javascript 中应该是 document.querySelectorAll("input[name=rate]:checked")[0].value
  • 在 Javascript 中,您不需要获得 all 它们:document.querySelector("input[name=rate]:checked").value.
【解决方案3】:

您可以使用checked 属性获取值。

var rates = document.getElementsByName('rate');
var rate_value;
for(var i = 0; i < rates.length; i++){
    if(rates[i].checked){
        rate_value = rates[i].value;
    }
}

【讨论】:

  • 鉴于只能检查一个无线电,我通常希望breakreturn 语句在if 块内停止额外的循环通过。一个小问题,但风格很好。
  • 这是这个问题最干净的香草实现。赞一个!
【解决方案4】:

对于生活在边缘的你们来说:

现在有一个叫做 RadioNodeList 的东西,访问它的 value 属性将返回当前检查输入的值。正如我们在许多发布的答案中看到的那样,这将消除首先过滤掉“已检查”输入的必要性。

示例表格

<form id="test">
<label><input type="radio" name="test" value="A"> A</label>
<label><input type="radio" name="test" value="B" checked> B</label>
<label><input type="radio" name="test" value="C"> C</label>
</form>

要检索检查的值,您可以执行以下操作:

var form = document.getElementById("test");
alert(form.elements["test"].value);

证明它的 JSFiddle:http://jsfiddle.net/vjop5xtq/

请注意,这是在 Firefox 33 中实现的(所有其他主要浏览器似乎都支持它)。旧版浏览器需要为 RadioNodeList 提供 polfyill 才能正常运行

【讨论】:

  • form.elements["test"].value 在 Chrome[版本 49.0.2623.87 m] 中运行良好。
  • 它必须是一个表格,不能使用例如一个分区。否则,这在 FF 71.0 中有效。
【解决方案5】:

下面为我工作的那个来自 api.jquery.com。

HTML

<input type="radio" name="option" value="o1">option1</input>
<input type="radio" name="option" value="o2">option2</input>

JavaScript

var selectedOption = $("input:radio[name=option]:checked").val()

变量 selectedOption 将包含所选单选按钮的值(即 o1 或 o2

【讨论】:

    【解决方案6】:

    另一个(显然是旧的)选项是使用以下格式: “document.nameOfTheForm.nameOfTheInput.value;” 例如document.mainForm.rads.value;

    document.mainForm.onclick = function(){
        var radVal = document.mainForm.rads.value;
        result.innerHTML = 'You selected: '+radVal;
    }
    <form id="mainForm" name="mainForm">
        <input type="radio" name="rads" value="1" />
        <input type="radio" name="rads" value="2" />
        <input type="radio" name="rads" value="3" />
        <input type="radio" name="rads" value="4" />
    </form>
    <span id="result"></span>

    您可以在表单中通过其名称来引用该元素。但是,您的原始 HTML 不包含表单元素。

    Fiddle here(适用于 Chrome 和 Firefox): https://jsfiddle.net/Josh_Shields/23kg3tf4/1/

    【讨论】:

    • 这是更古老的遗留 DOM 格式,真的不应该再使用了,因为它仅限于某些元素,并且跟不上当前的标准。
    • @j08691 好的,谢谢你告诉我。这是我在大学课堂上学到的东西之一。最好不要相信那里的任何东西,而只使用在线参考。
    • "...跟不上当前标准。"不是一个令人信服的论点。请详细说明。如果它有效,它就有效。它也比仅确定所选选项是否为“固定利率”的已接受答案的行数更少。
    • 上面的小提琴似乎不适用于 Safari 浏览器(7.1.4)。该值显示为未定义,更改单选按钮状态不会影响它。
    • 是的,这也不适用于 Edge 浏览器 (40.15063.0.0)。如果他们不赞成这种方式,那似乎很奇怪,因为这种方式更简单且有意义,因为单选按钮按其性质分组。大多数其他答案看起来就像他们正在检查复选框。
    【解决方案7】:

    使用 document.querySelector('input[type = radio]:checked').value; 获取选中复选框的值,您可以使用其他属性获取值,例如 name =性别等请通过下面的sn-p肯定对你有帮助,

    解决方案

    document.mainForm.onclick = function(){
        var gender = document.querySelector('input[name = gender]:checked').value;
        result.innerHTML = 'You Gender: '+gender;
    }
    <form id="mainForm" name="mainForm">
        <input type="radio" name="gender" value="Male" checked/>Male
        <input type="radio" name="gender" value="Female" />Female
        <input type="radio" name="gender" value="Others" />Others
    </form>
    <span id="result"></span>

    谢谢你

    【讨论】:

      【解决方案8】:

      HTML 代码:

      <input type="radio" name="rdoName" value="YES"/> <input type="radio" name="rdoName" value="NO"/>

      查询代码:

      var value= $("input:radio[name=rdoName]:checked").val();
      

      $("#btnSubmit").click(function(){
      var value=$("input:radio[name=rdoName]:checked").val();
      console.log(value);
      alert(value);
      })
      <script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
      <input type="radio" name="rdoName" value="YES"/> YES
      <input type="radio" name="rdoName" value="NO"/> NO
      <br/>
      <input type="button"id="btnSubmit"value="Which one Selected"/>

      你会得到

      value="YES" //if checked Radio Button with the value "YES"
      value="NO" //if checked Radio Button with the value "NO"
      

      【讨论】:

        【解决方案9】:

        在 Javascript 中,我们可以通过在您发布的上述代码中使用 Id 的“getElementById()”来获取值,其中包含名称而不是 Id 所以你要这样修改

        if (document.getElementById('r1').checked) {
          rate_value = document.getElementById('r1').value;
        }
        

        根据你的代码使用这个 rate_value

        【讨论】:

          【解决方案10】:

          自提出问题以来已经过去了一年左右,但我认为答案可能会得到显着改善。我发现这是最简单和最通用的脚本,因为它会检查按钮是否被选中,如果是,它的值是什么:

          <!DOCTYPE html>
          <html>
          <head>
              <meta charset="utf-8">
              <title>Check radio checked and its value</title>
          </head>
          <body>
          
              <form name="theFormName">
                  <input type="radio" name="theRadioGroupName" value="10">
                  <input type="radio" name="theRadioGroupName" value="20">
                  <input type="radio" name="theRadioGroupName" value="30">
                  <input type="radio" name="theRadioGroupName" value="40">
                  <input type="button" value="Check" onclick="getRadioValue('theRadioGroupName')">
              </form>
          
              <script>
                  function getRadioValue(groupName) {
                      var radios = theFormName.elements[groupName];
                      window.rdValue; // declares the global variable 'rdValue'
                      for (var i=0; i<radios.length; i++) {
                          var someRadio = radios[i];
                          if (someRadio.checked) {
                              rdValue = someRadio.value;
                              break;
                          }
                          else rdValue = 'noRadioChecked';
                      }
                      if (rdValue == '10') {
                          alert('10'); // or: console.log('10')
                      }
                      else if (rdValue == 'noRadioChecked') {
                          alert('no radio checked');
                      }
                  }
              </script>
          </body>
          </html>
          

          您也可以在另一个函数中调用该函数,如下所示:

          function doSomething() {
              getRadioValue('theRadioGroupName');
              if (rdValue == '10') {
                  // do something
              }
              else if (rdValue == 'noRadioChecked') {
                  // do something else
              }  
          } 
          

          【讨论】:

            【解决方案11】:

            假设您的表单元素由下面的myForm 变量引用,并且您的单选按钮共享名称“my-radio-button-group-name”,以下是纯 JavaScript 和标准兼容(尽管我没有检查它是否在任何地方都可用):

            myForm.elements.namedItem("my-radio-button-group-name").value
            

            上面将产生一个 checked(或选择,因为它也被称为)单选按钮元素的值,如果有的话,或者 null 否则。解决方案的关键是 namedItem 函数,它专门用于单选按钮。

            参见HTMLFormElement.elementsHTMLFormControlsCollection.namedItem,尤其是RadioNodeList.value,因为namedItem通常返回一个RadioNodeList对象。

            我使用 MDN 是因为它允许人们至少在很大程度上跟踪标准合规性,而且它比许多 WhatWG 和 W3C 出版物更容易理解。

            【讨论】:

            • 当我写答案时,我浏览了现有的答案,并没有看到任何与我想要分享的内容相似的内容。现在我发现我错过了至少两个类似的解决方案。尽管没有人使用我使用的特定语法编写他们的代码建议,但总体思路是相同的。供参考。关键是通过form.elements[name]form[name](也许是推测)或通过我上面的语法来获得对RadioNodeList 的引用。
            【解决方案12】:

            最短的

            [...rates.children].find(c=>c.checked).value
            

            let v= [...rates.children].find(c=>c.checked).value
            
            console.log(v);
            <div id="rates">
              <input type="radio" id="r1" name="rate" value="Fixed Rate"> Fixed Rate
              <input type="radio" id="r2" name="rate" value="Variable Rate"> Variable Rate
              <input type="radio" id="r3" name="rate" value="Multi Rate" checked="checked"> Multi Rate  
            </div>

            【讨论】:

            • 顺便说一句...document.rates.rate.value 更短,更直观,并且像魅力一样工作
            • @WΩLLE-ˈvɔlə 你的代码不起作用 - 我用问题 html 检查它,它抛出异常 "Uncaught TypeError: Cannot read properties of undefined" 因为 reates.rate 未定义
            【解决方案13】:

            多次直接调用单选按钮会为您提供 FIRST 按钮的值,而不是 CHECKED 按钮。我更喜欢调用 onclick javascript 函数,而不是循环通过单选按钮查看哪个被选中,该函数设置一个以后可以随意检索的变量。

            <input type="radio" onclick="handleClick(this)" name="reportContent" id="reportContent" value="/reportFleet.php" >
            

            调用:

            var currentValue = 0;
            function handleClick(myRadio) {
                currentValue = myRadio.value;
                document.getElementById("buttonSubmit").disabled = false; 
            }
            

            额外的好处是我可以处理数据和/或对按钮的检查做出反应(在这种情况下,启用提交按钮)。

            【讨论】:

            • 您应该绑定onchange 事件,以防用户使用键盘。
            【解决方案14】:

            您还可以在元素上使用 forEach 循环遍历按钮

                var elements = document.getElementsByName('radioButton');
                var checkedButton;
                console.log(elements);
                elements.forEach(e => {
                    if (e.checked) {
                        //if radio button is checked, set sort style
                        checkedButton = e.value;
                    }
                });
            

            【讨论】:

              【解决方案15】:

              对之前建议功能的改进:

              function getRadioValue(groupName) {
                  var _result;
                  try {
                      var o_radio_group = document.getElementsByName(groupName);
                      for (var a = 0; a < o_radio_group.length; a++) {
                          if (o_radio_group[a].checked) {
                              _result = o_radio_group[a].value;
                              break;
                          }
                      }
                  } catch (e) { }
                  return _result;
              }
              

              【讨论】:

                【解决方案16】:

                我对纯 javascript 的这个问题的看法是找到被检查的节点,找到它的值并将其从数组中弹出。

                var Anodes = document.getElementsByName('A'),
                    AValue = Array.from(Anodes)
                       .filter(node => node.checked)
                       .map(node => node.value)
                       .pop();
                console.log(AValue);
                

                请注意,我使用的是arrow functions。 有关工作示例,请参阅此 fiddle

                【讨论】:

                • 我会添加一个tagName === 'INPUT' 检查以确保您没有使用除input 之外的任何标签。
                【解决方案17】:

                您可以使用.find() 选择选中的元素:

                var radio = Array.from(document.querySelectorAll('#rate input'))
                
                var value = radio.length && radio.find(r => r.checked).value
                

                【讨论】:

                • 我不知道 Array.find,喜欢它!但是如果没有检查任何元素,这会中断。
                【解决方案18】:

                如果您使用的是 jQuery:

                $('input[name="rate"]:checked').val();

                【讨论】:

                  【解决方案19】:

                  如果你使用没有 jQuery 的 javascript,你可以使用这个命令:

                  document.querySelector(`input[type="radio"][name=rate]:checked`).value
                  

                  【讨论】:

                    【解决方案20】:
                    <form id="rates">
                      <input type="radio" name="rate" value="Fixed Rate"> Fixed
                      <input type="radio" name="rate" value="Variable Rate"> Variable
                      <input type="radio" name="rate" value="Multi Rate" checked> Multi
                    </form>
                    

                    那么……

                    var rate_value = rates.rate.value;
                    

                    【讨论】:

                    • 你能解释一下这是如何回答这个问题的吗?
                    • "从一组单选按钮中获取选定的值":rates.rate.value 不是rates.value
                    • 这是一个正确的答案。 document.getElementById("rates").rate.value [或] document.forms[0].rate.value
                    【解决方案21】:

                    按 ID 检查值:

                    var CheckedValues = ($("#r1").is(':checked')) ? 1 : 0;
                    

                    【讨论】:

                      【解决方案22】:

                      我使用 jQuery.click 函数来获得所需的输出:

                      $('input[name=rate]').click(function(){
                        console.log('Hey you clicked this: ' + this.value);
                      
                        if(this.value == 'Fixed Rate'){
                          rate_value = $('#r1').value;
                        } else if(this.value =='Variable Rate'){
                         rate_value = $('#r2').value;
                        } else if(this.value =='Multi Rate'){
                         rate_value = $('#r3').value;
                        }  
                      
                        $('#results').innerHTML = rate_value;
                      });
                      

                      希望对你有帮助。

                      【讨论】:

                        【解决方案23】:

                        如果按钮在表单中
                        var myform = new FormData(getformbywhatever); myform.get("rate");
                        上面的 QuerySelector 是一个更好的解决方案。但是,这种方法很容易理解,尤其是在您对 CSS 没有任何了解的情况下。另外,输入字段很可能无论如何都在表单中。
                        没查,还有其他类似的解决方法,抱歉重复

                        【讨论】:

                          【解决方案24】:
                          var rates = document.getElementById('rates').value;
                          

                          无法获取这样的单选按钮的值,而是使用

                          rate_value = document.getElementById('r1').value;
                          

                          【讨论】:

                          • 获取 HTML 标签的值使用 document.getElementById('r1').innerHtml
                          【解决方案25】:

                          如果您使用的是JQuery,请使用下面的 sn-p 作为单选按钮组。

                          var radioBtValue= $('input[type=radio][name=radiobt]:checked').val();
                          

                          【讨论】:

                            【解决方案26】:

                            只需使用:document.querySelector('input[rate][checked]').value

                            【讨论】:

                            • 对我不起作用;从 Pawan 那里看到类似的语法。如document.querySelector('input[name = rate]:checked').value
                            【解决方案27】:

                            这是一种解决方案,将单选按钮置于常量中,仅在需要时获取所选值。

                            const rates = document.forms.rates.elements["rate"]
                            showRate()
                            function showRate(){
                                document.getElementById('results').innerHTML = rates.value
                            }
                            <form id="rates" onchange="showRate()">
                              <input type="radio" id="r1" name="rate" value="Fixed Rate"> Fixed Rate
                              <input type="radio" id="r2" name="rate" value="Variable Rate"> Variable Rate
                              <input type="radio" id="r3" name="rate" value="Multi Rate" checked="checked"> Multi Rate 
                            </form>
                            <div id="results"></div>

                            【讨论】:

                              【解决方案28】:

                              https://codepen.io/anon/pen/YQxbZJ

                              HTML

                              <div id="rates">
                              <input type="radio" id="x1" name="rate" value="Fixed Rate"> Fixed Rate
                              <input type="radio" id="x2" name="rate" value="Variable Rate" 
                              checked="checked"> Variable Rate
                              <input type="radio" id="x3" name="rate" value="Multi Rate" > Multi Rate
                              </div>
                              
                              <button id="rdio"> Check Radio </button>
                              <div id="check">
                              
                              </div>
                              

                              JS

                              var x ,y;
                              var x = document.getElementById("check");
                              function boom()
                              {
                              if (document.getElementById("x1").checked)
                                y = document.getElementById("x1").value;
                              
                              else if(document.getElementById("x2").checked)
                                y = document.getElementById("x2").value;
                              
                              else if (document.getElementById("x3").checked)
                                y = document.getElementById("x3").value;
                              else
                                y = "kuch nhi;"
                              x.innerHTML = y;
                              }
                              
                              var z = document.getElementById('rdio');
                              z.addEventListener("click", boom);`
                              

                              【讨论】:

                                【解决方案29】:

                                   var rates=document.getElementsByName("rate");
                                            for (i = 0; i < rates.length; i++) {
                                            if (rates[i].checked) {
                                              console.log(rates[i].value);
                                              rate=rates[i].value;
                                              document.getElementById("rate").innerHTML = rate;
                                              alert(rate);
                                              
                                            }
                                          }
                                        <div id="rates">
                                          <input type="radio" id="r1" name="rate" value="Fixed Rate"> Fixed Rate
                                          <input type="radio" id="r2" name="rate" value="Variable Rate"> Variable Rate
                                          <input type="radio" id="r3" name="rate" value="Multi Rate" checked="checked"> Multi Rate  
                                        </div>
                                        </br>
                                        <div id='rate'>
                                        </div>

                                【讨论】:

                                  【解决方案30】:

                                  在 php 中非常简单
                                  html页面

                                  Male<input type="radio" name="radio" value="male"><br/>
                                  Female<input type="radio" name="radio" value="female"><br/>
                                  Others<input type="radio" name="radio" value="other"><br/>
                                  <input type="submit" value="submit">

                                  从表单取值到php

                                  $radio=$_POST['radio'];<br/>
                                  use php if(isset($_POST['submit']))<br/>
                                  {<br/>
                                  echo "you selected".$radio."thank u";<br/>
                                  }
                                  

                                  【讨论】:

                                    猜你喜欢
                                    • 1970-01-01
                                    • 2011-05-07
                                    • 2011-07-28
                                    • 2016-08-30
                                    • 1970-01-01
                                    • 1970-01-01
                                    • 2012-01-27
                                    • 2014-08-24
                                    相关资源
                                    最近更新 更多