2012-03-08 83 views
152

我的JS程序出现了一些奇怪的问题。我有这个工作正常,但由于某种原因,它不再工作。我只想找到单选按钮的值(选择哪一个)并将其返回给变量。由于某种原因,它不断返回undefined。这里是我的代码:用Javascript获取单选按钮值

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

可能重复[如何使用js获取所选单选按钮值](http://stackoverflow.com/questions/3869535/how-to-get-the-selected-radio-button-value-using-js ) – 2016-09-26 14:40:40

回答

301

的JavaScript:

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

http://jsfiddle.net/Xxxd3/610/

编辑:感谢HATCHA和jpsetung提供修改建议。

+14

不要忘记** break; **当你得到它。 – HATCHA 2013-03-18 10:20:01

+4

这是工作的jQuery 1.7,但现在正确的语法为jQuery 1.9是$('input [name =“genderS”]:checked')。val(); (删除@) – jptsetung 2013-06-04 15:19:17

+1

我相信'@'的语法是[弃牌甚至更早](http://api.jquery.com/category/selectors/attribute-selectors/)比(jQuery 1.2) – 2013-06-21 12:24:16

6

编辑: 正如Chips_100说,你应该使用:

var sizes = document.theForm[field]; 

的情况下直接使用t est变量。


老答案:

你不应该eval这样吗?

var sizes = eval(test); 

我不知道这是如何工作,但对我来说,你只是复制一个字符串。

+0

eval在这里不是最好的选择......你可能想说'var sizes = document.theForm [field];'并删除第一个赋值,所以不再使用'test'变量。 – 2012-03-08 13:43:38

+0

据我所知,会评估工作吗?或者它只能用于'eval('var sizes = document.theForm。'+ field)'? – 2012-03-08 13:53:21

+0

你的答案中的eval语句'var sizes = eval(test);'会以这种方式工作(我只是在萤火虫中测试它)。 – 2012-03-08 13:59:15

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

小提琴here

2

这里是无线电广播的示例,其中没有选中= “选中”属性用于

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

DEMOhttp://jsfiddle.net/ipsjolly/hgdWp/2/ [单击查找不选择任何无线电]

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

5
document.forms.your-form-name.elements.radio-button-name.value 
+1

你的答案可能会更冗长...... – h22 2013-01-29 10:49:37

+2

这也可以工作:'document.forms.your-form-name.name-by-radio-buttons.value' – 2015-11-25 00:51:36

-4
var value = $('input:radio[name="radiogroupname"]:checked').val(); 
14

因为jQuery的1.8,用于查询的正确的语法是

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

$('input[@name="genderS"]:checked').val();了,这是在jQuery的1.7工作(与@)。

+0

@barwnikk,那是关于jbabey批准的答案的补充信息,他从那时起对其进行了修改。 – jptsetung 2015-03-28 13:28:50

124

这适用于任何浏览器。

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

这是得到任何输入类型值的最纯粹的方法。 你做不是需要在你的路径中包含jQuery。

+7

由于提问者在任何地方都没有提到jQuery,所以给出纯JavaScript的答案可能会更好。如果你必须使用jQuery,它应该不是:$('input:radio [name =“genderS”]:checked')。val()'? – neelsg 2014-07-22 12:05:11

+9

使用document.querySelector()是一个纯JavaScript的答案:https://developer.mozilla.org/en-US/docs/Web/API/document.querySelector – AdamJonR 2015-02-09 06:05:54

+5

如果你将它存储在一个变量中,并且没有选择你想要的单选按钮导致浏览器停止。控制台说:TypeError'document.querySelector(...)'是'null'。 – 2015-05-23 22:44:41

0

使用纯JavaScript,可以处理对派发事件的对象的引用。

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

最简单的办法:

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

+0

增加投票有两个原因:1.它的工作原理。 2.这不是一个蹩脚的jquery答案。 – John 2017-10-07 15:30:25

3

这是纯JavaScript的基础上,通过答案,但@Fontas安全代码返回一个空字符串(和避免TypeError )如果没有选定的单选按钮:

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

代码分解这样的:

  • 1行:获取到控制的引用(a)是<input>类型,(b)具有一个genderS属性name,和(c)进行检查。
  • 第2行:如果有这样的控件,则返回它的值。如果没有,则返回空字符串。如果第1行发现控制,则genderSRadio变量为truthy,如果不是,则为null/false。

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

-2
<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(); 
3

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

2

万一有人在寻找一个答案,并降落在这里像我一样,从Chrome浏览器34和Firefox 33,你可以做到以下几点:

var form = document.theForm; 
var radios = form.elements['genderS']; 
alert(radios.value); 

或简单:

alert(document.theForm.genderS.value); 

refrence:https://developer.mozilla.org/en-US/docs/Web/API/RadioNodeList/value

5

的ECMAScript 6版

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

如果有可能的你为你的表单元素()分配一个Id,这种方式可以被认为是一个安全的交替IVE方式(特别是当单选组元素的名称是不是在文件唯一):

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

让假设您需要将单选按钮的不同行的形式,每个独立的属性名称('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> 

我也插入最终输出到一个隐藏表单元素要与形式一并提交。