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

Posted

技术标签:

【中文标题】JavaScript 读取 IE 和 FireFox 中的单选按钮值【英文标题】:JavaScript read radio button value in IE and FireFox 【发布时间】:2014-10-12 18:28:41 【问题描述】:

我有一个使用 javascript 构建 POST 语句的简单 Web 表单。在 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&lt;input type="text" name="fname" id="fname"&gt; 但是,当我提交表单并构建帖子时,单选按钮的值始终未定义。它在 Chrome 中运行良好,但在 IE 或 FireFox 中没有。

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

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

【问题讨论】:

【参考方案1】:

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

使用不同的 ID。

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

【讨论】:

名称应该相同 是的,我的错,得意忘形了.. :-)【参考方案2】:

如上所述,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>

【讨论】:

这应该可以,但它不适合我。在 IE 和 FireFox 中,当我检查 env 的值时,它总是未定义。我也在使用这种精确的语法... 一开始我错了。 form.elements['env'] 返回一个数组,您必须遍历它才能找到选择了哪个按钮。这类似于我看到的@Afsa 已经发布的内容,但不同之处在于我直接使用表单而不是查询所有按钮的 DOM。更改选择时,这在 Firefox 中正常工作。【参考方案3】:

试试这个

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;

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

【讨论】:

这很漂亮,而且效果很好。谢谢,谢谢,谢谢。【参考方案4】:

在 ES-2015 上简短明了,用于 Babel:

function getValueFromRadioButton( name )
  return [...document.getElementsByName(name)]
         .reduce( (rez, btn) => (btn.checked ? btn.value : rez), null)


console.log( getValueFromRadioButton('payment') );
<div>  
  <input type="radio" name="payment" value="offline">
  <input type="radio" name="payment" value="online">
  <input type="radio" name="payment" value="part" checked>
  <input type="radio" name="payment" value="free">
</div>

【讨论】:

【参考方案5】:

你可以试试这个:

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

【讨论】:

以上是关于JavaScript 读取 IE 和 FireFox 中的单选按钮值的主要内容,如果未能解决你的问题,请参考以下文章

从 Javascript、Ajax、IE 访问二进制数据:可以从 Javascript(不是 VB)读取 responseBody 吗?

在 IE XMLHttpRequest 中读取文件:// URL

CSS 菜单仅在 IE (SWFObject) 中隐藏在 flash 后面

[转]Google Chrome/IE/FireFox查看HTTP请求头request header响应头

每日学习笔记----js中可以直接用id名调用的问题?

“iframe.contentDocument”在 IE8 和 FF(3.5 及更低版本)中不起作用还有其他解决此问题的步骤吗?