如何获取所选单选按钮的值?


264

我的JS程序遇到一些奇怪的问题。我的工作正常,但由于某种原因,它不再工作。我只想查找单选按钮的值(已选中该按钮)并将其返回给变量。由于某种原因,它不断返回undefined

这是我的代码:

function findSelection(field) {
    var test = 'document.theForm.' + field;
    var sizes = test;

    alert(sizes);
        for (i=0; i < sizes.length; i++) {
            if (sizes[i].checked==true) {
            alert(sizes[i].value + ' you got a value');     
            return sizes[i].value;
        }
    }
}

submitForm

function submitForm() {

    var genderS =  findSelection("genderS");
    alert(genderS);
}

HTML:

<form action="#n" name="theForm">

    <label for="gender">Gender: </label>
    <input type="radio" name="genderS" value="1" checked> Male
    <input type="radio" name="genderS" value="0" > Female<br><br>
    <a href="javascript: submitForm()">Search</A>
</form>

Answers:


395

您可以执行以下操作:

var radios = document.getElementsByName('genderS');

for (var i = 0, length = radios.length; i < length; i++) {
  if (radios[i].checked) {
    // do whatever you want with the checked radio
    alert(radios[i].value);

    // only one radio can be logically checked, don't check the rest
    break;
  }
}
<label for="gender">Gender: </label>
<input type="radio" name="genderS" value="1" checked="checked">Male</input>
<input type="radio" name="genderS" value="0">Female</input>

jsfiddle

编辑:感谢HATCHA和jpsetung的编辑建议。


5
那在jquery 1.7上有效,但是现在jQuery 1.9的正确语法是$('input [name =“ genderS”]:checked')。val(); (删除@)
jptsetung 2013年

1
我认为该@语法于(jquery 1.2)
就已

@TomPietrosanti该文档似乎有点不足jsfiddle.net/Xxxd3/608在<1.7.2中可用,但在> 1.8.3中不可用。无论如何,@绝对应该删除
jbabey 2013年

是的,看起来他们在那里保留了一些向后兼容性,但没有更新文档以使其匹配。我记得当年的hoopla放弃了一些仍在广泛使用的不赞成使用的功能,因此他们增加了支持。也许这就是为什么...
Tom Pietrosanti 2013年

2
document.querySelector()现在应该是直接JavaScript中推荐的方法。
戴夫

335

这适用于任何资源管理器。

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

这是获取任何输入类型的值的简单方法。您也不需要包含jQuery路径。


23
使用document.querySelector()是一个纯JavaScript答案:developer.mozilla.org/zh-CN/docs/Web/API/document.querySelector
AdamJonR 2015年

8
如果将其存储在variabel中,并且未选择任何单选按钮,则会导致浏览器停止。控制台说:TypeError document.querySelector(...)null
我叫我

14
仅在选择了一个后才起作用。因此,您应该先检查它。 var selector = document.querySelector('input[name="genderS"]:checked'); if(selector) console.log(selector.value);
Markus Zeller 2015年

我正在使用Meteor中的Templates,这个:checked技巧对我来说完全accountType = template.find("[name='optradio']:checked").value;
有用

我在一个企业环境中无法在IE11上持续工作-一种向后兼容模式。
史蒂夫·布莱克

35
document.forms.your-form-name.elements.radio-button-name.value

5
这也适用:document.forms.your-form-name.name-shared-by-radio-buttons.value
Web_Designer 2015年

7
我认为大多数人都忽略了这一点。接受的答案有效。Giorgos Tsakonas的回答更好。但这是根本上正确的答案。这是单选按钮实际工作的方式。请注意,如果未选择任何内容,它将返回一个空字符串。
马克·戈德法恩

@Web_Designer您的评论不应该是真正的答案吗?
Ideogram

如果您的单选输入不是格式,则此方法不起作用,因此我认为这不是比querySelector一个更好的答案,也许应该将这两个合并。
–TomášHübelbauer

如果您的收音机在标签内,则这种方法不起作用
Igor Fomenko

19

从jQuery 1.8开始,查询的正确语法是

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

现在已经$('input[@name="genderS"]:checked').val();不行了,它已经在jQuery 1.7中工作了(使用@)。


16

ECMAScript 6版本

let genderS = Array.from(document.getElementsByName("genderS")).find(r => r.checked).value;

16

最简单的解决方案:

 document.querySelector('input[name=genderS]:checked').value

1
投票有两个原因:1.有效。2.这不是一个me脚的jquery答案。
约翰·

21
这是一年前给出的@Giorgos Tsakonas答案的精确副本。
阮T

7

试试这个

function findSelection(field) {
    var test = document.getElementsByName(field);
    var sizes = test.length;
    alert(sizes);
    for (i=0; i < sizes; i++) {
            if (test[i].checked==true) {
            alert(test[i].value + ' you got a value');     
            return test[i].value;
        }
    }
}


function submitForm() {

    var genderS =  findSelection("genderS");
    alert(genderS);
    return false;
}

小提琴在这里


6

编辑:如Chips_100所说,您应该使用:

var sizes = document.theForm[field];

直接使用测试变量。


旧答案:

你不eval喜欢这个吗?

var sizes = eval(test);

我不知道它是如何工作的,但是对我来说,您只是在复制一个字符串。


在这里eval并不是最好的选择……您可能要说一遍var sizes = document.theForm[field];并删除第一个分配,因此不再使用test变量。
丹尼斯

就我所知,评估会照常进行吗?还是只能使用eval('var sizes=document.theForm.' + field)
Michael Laffargue'3

您的答案中的eval语句var sizes = eval(test);将以这种方式工作(我只是在firebug中对其进行测试)。
丹尼斯

这样做更有意义,但是我在放在field方括号中的那一行上出现了“意外令牌[”错误。关于为什么的任何猜测?
mkyong 2012年

4

这是纯JavaScript,基于@Fontas的回答,但带有安全代码,TypeError如果没有选中的单选按钮,则返回一个空字符串(并避免使用):

var genderSRadio = document.querySelector("input[name=genderS]:checked");
var genderSValue = genderSRadio ? genderSRadio.value : "";

代码分解如下:

  • 第1行:获取对以下控件的引用:(a)是<input>类型,(b)具有name属性genderS,并且(c)被检查。
  • 第2行:如果存在此类控件,则返回其值。如果没有,则返回一个空字符串。的genderSRadio变量是truthy如果第1行的发现控制和空/ falsey如果它没有。

对于JQuery,请使用@jbabey的答案,请注意,如果没有选中的单选按钮,它将返回undefined



3

这是不使用Checked =“ checked”属性的收音机示例

function test() {
var radios = document.getElementsByName("radiotest");
var found = 1;
for (var i = 0; i < radios.length; i++) {       
    if (radios[i].checked) {
        alert(radios[i].value);
        found = 0;
        break;
    }
}
   if(found == 1)
   {
     alert("Please Select Radio");
   }    
}

演示http : //jsfiddle.net/ipsjolly/hgdWp/2/ [ 单击查找而不选择任何收音机 ]

来源:http : //bloggerplugnplay.blogspot.in/2013/01/validateget-checked-radio-value-in.html


2

这是一种使用普通JavaScript获取选中的单选按钮的值的好方法:

const form = document.forms.demo;
const checked = form.querySelector('input[name=characters]:checked');

// log out the value from the :checked radio
console.log(checked.value);

资料来源:https : //ultimatecourses.com/blog/get-value-checked-radio-buttons

使用此HTML:

<form name="demo">
  <label>
    Mario
    <input type="radio" value="mario" name="characters" checked>
  </label>
  <label>
    Luigi
    <input type="radio" value="luigi" name="characters">
  </label>
  <label>
    Toad
    <input type="radio" value="toad" name="characters">
  </label>
</form>

你也可以使用数组查找checked属性来找到检查项目:

Array.from(form.elements.characters).find(radio => radio.checked);

1

使用纯JavaScript,您可以处理对调度事件的对象的引用。

function (event) {
    console.log(event.target.value);
}

1

让我们假设您需要在表单中放置单选按钮的不同行,每个单选按钮具有单独的属性名称('option1','option2'等),但具有相同的类名。也许您需要它们在多行中,它们将根据与问题相关的1到5的小数位数分别提交一个值。您可以这样编写JavaScript:

<script type="text/javascript">

    var ratings = document.getElementsByClassName('ratings'); // we access all our radio buttons elements by class name     
    var radios="";

    var i;
    for(i=0;i<ratings.length;i++){
        ratings[i].onclick=function(){
            var result = 0;
            radios = document.querySelectorAll("input[class=ratings]:checked");
            for(j=0;j<radios.length;j++){
                result =  result + + radios[j].value;
            }
            console.log(result);
            document.getElementById('overall-average-rating').innerHTML = result; // this row displays your total rating
        }
    }
</script>

我还将最终输出插入到一个隐藏的表单元素中,与表单一起提交。


1
 document.querySelector('input[name=genderS]:checked').value

0

如果可以为表单element()分配ID,则可以将这种方法视为安全的替代方法(特别是当单选组元素名称在文档中不唯一时):

function findSelection(field) {
    var formInputElements = document.getElementById("yourFormId").getElementsByTagName("input");
    alert(formInputElements);
        for (i=0; i < formInputElements.length; i++) {
        if ((formInputElements[i].type == "radio") && (formInputElements[i].name == field) && (formInputElements[i].checked)) {
            alert(formInputElements[i].value + ' you got a value');     
            return formInputElements[i].value;
        }
    }
}

HTML:

<form action="#n" name="theForm" id="yourFormId">

-3
 <input type=radio name=rdbExampleInfo id=rdbExamples value="select 1">
 <input type=radio name=rdbExampleInfo id=rdbExamples value="select 2">
 <input type=radio name=rdbExampleInfo id=rdbExamples value="select 3">
 <input type=radio name=rdbExampleInfo id=rdbExamples value="select 4"> 

等然后使用

  $("#rdbExamples:checked").val()

要么

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

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.