【问题标题】:Radio button html missing checked attribute, though Firebug indicates it is checked单选按钮 html 缺少选中的属性,尽管 Firebug 表明它已被选中
【发布时间】:2012-02-27 16:33:20
【问题描述】:

问题陈述总结:浏览器上的单选按钮html没有显示checked属性,但是Firebug表明radio的checked属性设置为checked。

测试于

浏览器:FF 3.6.18 和 IE8
jQuery:1.5
MVC3(剃刀)

详情

使用 MVC3(带有 Razor)我正在从服务器渲染以下单选按钮。所需的功能是在检查一个无线电时,另一个应该未选中,反之亦然。换句话说,用户只能选择一个选项——比如 val1 或 val2。

<div id="myRadioList">
    <div>
        <input type="radio" value="val1" onclick="updateFunctionCalledHere(this)" name="myRadioName" id="myRadioName_val1" checked="checked">
        
    </div>
    <div>
        <input type="radio" value="val2" onclick="updateFunctionCalledHere(this)" name="myRadioName" id="myRadioName_val2">
    </div>
</div>

我观察到的是,如果用户切换选择的收音机,新选择的收音机(比如说myRadioName_val2)显示为使用萤火虫检查,但 html 仍反映另一个单选按钮已选中。因此,其他一些验证失败。

我已经尝试从字面上删除两个单选按钮的所有选中属性,然后只检查单击的那个。

这是我正在做的设置当前点击的收音机,这是行不通的:

$("#myRadioList > div > input[value='myRadioName_val2]').attr('checked', 'checked');

我正在简化我的代码以避免发布不必要的细节。

【问题讨论】:

  • 选择器的引号不匹配,您可能不会看到 html 更改,请使用 prop() 方法

标签: javascript jquery jquery-events


【解决方案1】:

HTML 中的checked 属性是默认值。 JavaScript 中的checked 属性指的是单选按钮的当前状态。

一般来说,最好让浏览器处理单选按钮和复选框的checked状态,而不是自己设置,否则会遇到这类问题。正如已经建议的那样,通过prop("checked") 或通过.is(":checked") 获取当前状态是安全的。

您可能还想考虑使用 $('#myRadioList').find('input[value="myRadioName_val2"]') 或更好的语法 $('#myRadioName_val2'),因为 jQuery 中的子选择器可能相当慢,因为它们是从右到左读取的。

【讨论】:

  • 感谢您的精彩解释!
【解决方案2】:

你应该使用

$("#myRadioList > div > input[value=myRadioName_val2]").prop('checked', true);

【讨论】:

    【解决方案3】:

    嗯,你在使用 jQuery 选择器时确实存在语法错误。应该是:

    $('#myRadioList > div > input[value="myRadioName_val2"]')
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2020-11-05
      • 2011-04-27
      • 2019-12-21
      • 2011-06-20
      • 2023-03-16
      • 1970-01-01
      相关资源
      最近更新 更多