IE和FireFox中的JavaScript读取单选按钮值

IE和FireFox中的JavaScript读取单选按钮值,javascript,html,forms,radio-button,Javascript,Html,Forms,Radio Button,我有一个简单的web表单,它使用JavaScript构建POST语句。在Chrome中,我可以使用一行简单的代码 var form = document.forms['myForm']; var env = form.env.value; 表单本身看起来像这样 <form name="myForm" action='JavaScript:xmlhttpPost("/path/to/some/pythoncode.py")'> <input type="radio" n

我有一个简单的web表单,它使用JavaScript构建POST语句。在Chrome中,我可以使用一行简单的代码

var form = document.forms['myForm'];
var env = form.env.value;
表单本身看起来像这样

<form name="myForm" action='JavaScript:xmlhttpPost("/path/to/some/pythoncode.py")'>
    <input type="radio" name="env" id="env" value="inside">Inside
    <input type="radio" name="env" id="env" value="outside" checked="checked">Outside
    <input type="radio" name="env" id="env" value="both">Both
    <input type="radio" name="env" id="env" value="neither">Neither

在…内
外面
二者都
也不
我在表单上有一些文本框,我可以使用相同的技术来查找值(
var name=form.fname.value
用一个
然而,当我提交表单并构建帖子时,单选按钮的值总是未定义的。它在Chrome中运行良好,但在IE或FireFox中却没有

我尝试了
var env=document.getElementById('env').value
,但由于某种原因,无论我选择什么,它总是默认为第一个值(内部)。使用Chrome时,该方法也不会返回值


在FF或IE中读取无线电输入的检查值时,我是否缺少一些内容?

您对多个元素使用相同的ID,ID对于页面上的元素是唯一的

使用不同的ID


编辑:名称可以相同。因为单选按钮是一个组。

如上所述,ID应该不同才能有效,但您可以通过将所有ID一起删除并仅使用输入名称来实现这一点:

var form = document.forms['myForm'];
var radios = form.elements["env"];
var env = null;
for(var i=0;i<radios.length;i++) {
    if(radios[i].checked == true) {
        env = radios[i].value;
    }
}

<form name="myForm">
<input type="radio" name="env" value="inside">Inside
<input type="radio" name="env" ivalue="outside" checked="checked">Outside
<input type="radio" name="env" value="both">Both
<input type="radio" name="env" value="neither">Neither
</form>
var form=document.forms['myForm'];
var radios=form.elements[“env”];
var-env=null;
对于(var i=0;i试试这个

function getValueFromRadioButton(name) {
   //Get all elements with the name
   var buttons = document.getElementsByName(name);
   for(var i = 0; i < buttons.length; i++) {
      //Check if button is checked
      var button = buttons[i];
      if(button.checked) {
         //Return value
         return button.value;
      }
   }
   //No radio button is selected. 
   return null;
}
函数getValueFromRadioButton(名称){
//获取具有名称的所有元素
var buttons=document.getElementsByName(名称);
对于(变量i=0;i

ID是唯一的,因此您不应该对多个项目使用相同的ID。如果使用此功能,您可以删除所有单选按钮ID。

ES-2015上的Short&clear,用于Babel:

函数getValueFromRadioButton(名称){
return[…document.getElementsByName(名称)]
.reduce((rez,btn)=>(btn.checked?btn.value:rez),null)
}
console.log(getValueFromRadioButton(“付款”);

您可以尝试以下方法:

var form = document.querySelector('form#myForm');
var env_value = form.querySelector('[name="env"]:checked').value;

名字应该是sameyeah,我的坏,被冲昏头脑了…-)这应该可以,但对我来说不行。在IE和FireFox中,当我检查env的值时,它总是未定义的。我也在使用这个确切的语法…一开始我是不正确的。form.elements['env']返回一个数组,您必须遍历该数组才能找到所选的按钮。这与我看到的@Afsa帖子类似,但不同之处在于我直接使用表单,而不是查询DOM中的所有按钮。在Firefox中更改选择时,这项操作正确。这项操作非常漂亮,非常有效。谢谢,谢谢谢谢,谢谢。