如何获得所选单选按钮的价值?


316

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

这是我的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;

我一直不确定。


50
您在这里没有使用jQuery,但如果您愿意,可以使用此工具:$("input[type='radio'][name='rate']:checked").val();
GJK 2013年

为什么不能检查该物体?无论如何,您都需要使用.checked
Amol M Kulkarni


我不确定是否需要这样做,但是将单选按钮放在<form></form>容器中是一个好习惯。
卡米尔

Answers:


239
var rates = document.getElementById('rates').value;

rates元素是div,因此它没有值。这可能undefined是来源。

checked属性将告诉您是否选择了元素:

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

229
在jquery中应该是$("input[name=rate]:checked").val()
Kamran Ahmed

1
我不明白,是否有两个具有相同ID的元素?
mzalazar 2014年

3
@mzalazar不,每个单选按钮都有自己的ID,但是每个按钮都有相同的名称,这就是将它们归为一组的原因,因此,如果您选择一个,则取消选择另一个按钮。使用Kamran Ahmed答案,您可以检查组中哪个单选按钮被选中,并且仅获取所选(选中)的单个按钮的值。
Broco

4
上方的mahdavipanah代码(带有[checked])查找属性(即初始状态)。您应该改为使用:checked,它查找属性(即当前状态),并且几乎总是您想要的。
Gras Double

5
用Javascript应该是document.querySelectorAll("input[name=rate]:checked")[0].value
Vincent McNabb

519

在IE9及更高版本以及所有其他浏览器中都可以使用。

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

13
当然,您必须检查querySelector是否返回null。如果未选中任何单选按钮,就是这种情况。
罗伯特

18
@KamranAhmed:您的jQuery解决方案成本更高。

5
ParthikGosar:IE8不支持:checked选择器。

14
请注意,rate不需要使用引号引起来。
mbomb007

1
@KamranAhmed直到并且除非您可以概要分析上面的内容和/或检查该调用背后的实现,否则您只能说说上面的性能,而不能说任何其他调用本机代码的oneliner。我们没有足够的信息来推测浏览器如何管理:checked元素的定位-也许它具有“散列和缓存”的所有内容,并且只是一项O(1)操作。除非您已对其进行概要分析,以表明查询时间随页面上元素的数量而增加,或者除非您了解其背后的浏览器源代码,否则您将无法分辨。
2013年

144

您可以使用该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;
    }
}

13
鉴于只能检查一个无线电,通常我希望该块内的breakor return语句if停止循环中的其他传递。一点点,但风格不错。
RobP

1
这是此问题的最简洁的实现。荣誉!
SeaWarrior404 '19

37

对于生活在边缘的人们:

现在有一个称为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中实现的(所有其他主流浏览器似乎都支持它)。较旧的浏览器将需要使用polfyill RadioNodeList才能正常运行


1
form.elements["test"].value在Chrome [版本49.0.2623.87 m]中效果很好。
Evan Hu

它必须是一种形式,不能使用例如div。否则,这在FF 71.0中有效。
安德鲁

16

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)


11

另一个(显然是较旧的)选项是使用以下格式:“ 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但是不包含form元素。

在这里拨弄小提琴(可在Chrome和Firefox中使用):https : //jsfiddle.net/Josh_Shields/23kg3tf4/1/


1
这是一种较旧的旧DOM格式,实际上不应该再使用,因为它仅限于某些元素并且与当前标准不符。
j08691 2015年

@ j08691好的,谢谢您告诉我。这是我在大学课堂上学到的东西之一。最好不要信任那里的任何内容,而要使用在线引用。
JHS 2015年

6
“ ...跟不上当前标准。” 这不是一个令人信服的论点。请详细说明。如果可行,则可以。它的行数也少于接受的答案,后者仅决定所选选项是否为“固定费率”。
零和一

上面的小提琴似乎不适用于Safari浏览器(7.1.4)。该值显示为未定义,更改单选按钮状态不会对此产生影响。
Stuart R. Jefferys

是的,这也不适用于Edge浏览器(40.15063.0.0)。如果以这种方式弃用,则似乎很奇怪,因为这种方式更简单并且有意义,因为单选按钮按其性质分组。其他大多数答案看起来就像它们正在选中复选框一样。
mikato

10

使用document.querySelector('input [type = radio]:checked')。value; 要获取所选复选框的值,您可以使用其他属性来获取值,例如名称=性别 等。请仔细阅读 以下代码段,它肯定会对您有所帮助,

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>

谢谢


7

HTML代码:

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

JQUERY代码:

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"

5

在Javascript中,我们可以通过getElementById()在上面发布的代码中使用Id的“ ” 获取值,其中包含的名称不是Id,因此您可以像这样修改

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

根据您的代码使用此rate_value


5

自问问题以来已经过去了一年左右,但我认为答案的实质性改进是可能的。我发现这是最简单,最通用的脚本,因为它检查按钮是否已被检查,如果已检查,其值是什么:

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

5

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

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

上面将产生一个选中(或选中,也称为)单选按钮元素(如果有)的值null。解决方案的关键是namedItem专门用于单选按钮的功能。

请参阅HTMLFormElement.elementsHTMLFormControlsCollection.namedItem,尤其是RadioNodeList.valuenamedItem 通常会返回一个RadioNodeList对象。

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


当我写答案时,我浏览了现有的答案,没有看到任何与我想分享的东西相似的东西。现在我看到我至少错过了两个类似的解决方案。尽管没有人使用我使用的特定语法编写代码建议,但是总体思路是相同的。仅供参考。关键是要获得对RadioNodeList通过类似form.elements[name]form[name](也许是一种推测)或通过我上面的语法。
amn 2016年

3

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

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

另一个优点是我可以处理数据和/或对按钮的检查做出反应(在这种情况下,启用SUBMIT按钮)。


5
如果onchange用户使用键盘,则应该绑定事件。
约翰·德沃夏克

2

对以前建议的功能的改进:

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

2

我对使用纯JavaScript的此问题的看法是找到选中的节点,找到其值,然后将其从数组中弹出。

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

请注意,我正在使用箭头功能。有关工作示例,请参见此小提琴


我会加一张tagName === 'INPUT'支票,以确保您除了以外没有使用其他任何标签input
Aternus


1

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

var radio = Array.from(document.querySelectorAll('#rate input'))

var value = radio.length && radio.find(r => r.checked).value

1
我不知道Array.find,喜欢它!但是,如果不检查任何元素,这将中断。
pongi

0
<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.valuerates.value
user7420100

这是正确的答案。document.getElementById("rates").rate.value[或]document.forms[0].rate.value
阿蒂卡


0

我使用了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;
});

希望能帮助到你。


0

如果按钮采用
var myform = new FormData(getformbywhatever); myform.get("rate");
QuerySelector 形式,则是更好的解决方案。但是,这种方法很容易理解,特别是在您不了解CSS的情况下。另外,输入字段很可能还是采用某种形式。
没有检查,还有其他类似的解决方案,对不起,重复


0
var rates = document.getElementById('rates').value;

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

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

要获取HTML标签的值,请使用document.getElementById('r1')。innerHtml
James Cluade

0

如果您使用JQuery,请使用下面的单选按钮片段。

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

0

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


没有为我工作;在Pawan上面看到了类似的语法。就像,document.querySelector('input[name = rate]:checked').value
Tim Erickson

0

   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>


0

您还可以在元素上使用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;
        }
    });

-1

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

-2

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