单选按钮组在 Chrome 中有价值,但在 Firefox 中没有

Posted

技术标签:

【中文标题】单选按钮组在 Chrome 中有价值,但在 Firefox 中没有【英文标题】:Radio button group has value in Chrome but not in Firefox 【发布时间】:2014-06-23 19:14:07 【问题描述】:

我有一个类似的 html 表单

    <form name="radio-mc">
        <input type="radio" name="mc" id="radio-1" value="1"> First
        <input type="radio" name="mc" id="radio-2" value="2"> Second
        <input type="radio" name="mc" id="radio-3" value="3"> Third
    </form>

我可以使用以下 javascript 通过表单/输入名称在 Chrome 中获取所选值

document.forms['radio-mc']['mc'].value

但在 Firefox 中,该值是未定义的。

我通常认为这是 Chrome 的特色,但在 Firefox 检查器中,我可以看到父对象是具有 value 属性的 [object NodeList]。它根本没有设置任何东西......似乎永远。

在这种情况下我不能使用 jQuery。有什么方法可以在 Firefox 中的 vanilla javascript 中获得该值(无需像在 Chrome 中那样遍历单选按钮)?

【问题讨论】:

试试这个 var selected = $("input[type='radio'][name='mc']:checked"); 是否需要支持IE8及更低版本?如果没有,那么document.forms['radio-mc'].querySelector('input:checked'); @cookiemonster 我没有。那效果很好。谢谢! @cookiemonster 您应该将其发布为答案 @kennypu:谢谢,但 RobG 给出的答案比我想的要详细得多,所以我想我会 +1 他的。 :-) 【参考方案1】:

在引入Selectors API 之前,获取单选按钮组值的唯一方法是遍历成员:

function getRadioValue(group) 
  for (var i=0, iLen=group.length; i<iLen; i++) 
    if (group[i].checked) 
      return group[i].value;
    
  
  // No button selected - return '' or undefined?
  return '';


console.log(getRadioValue(document.forms['radio-mc']['mc'])); // value

然而,正如 cookie monster 所说,您可以将 querySelectorAll 用于支持它的浏览器:

var checked = document.forms['radio-mc'].querySelector('input:checked');
console.log(checked? checked.value : '');

如果表单中有多个单选按钮,或者还有复选框,则需要以下内容:

document.forms['radio-mc'].querySelector('[name=mc]:checked')    

否则你只会得到第一个选中的单选或复选框。

另外,由于您没有默认选择按钮,因此您需要处理没有选择按钮的情况。

【讨论】:

以上是关于单选按钮组在 Chrome 中有价值,但在 Firefox 中没有的主要内容,如果未能解决你的问题,请参考以下文章

PHP,单选按钮返回,而不是价值

Reactjs:我正在根据状态检查单选按钮,但在选中一个单选按钮时无法单击其他单选按钮

使用 twitter 引导程序的单选按钮 - 无法获得价值

Android从选定的单选按钮获取价值

Html.RadioButtonFor 单选按钮不在 Safari 或 Chrome 中呈现

单选按钮更改事件在 chrome 或 safari 中不起作用