3

提前感谢您的宝贵时间。

问题陈述总结:浏览器单选按钮html不显示checked属性,但是Firebug提示radio的checked属性设置为checked

经测试

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

细节

使用 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)显示为使用 firebug 进行检查,但 html 仍然反映另一个单选按钮已选中。因此,其他一些验证失败。

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

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

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

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

谢谢!

4

3 回答 3

5

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

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

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

于 2012-02-27T17:19:05.110 回答
4

你应该使用

$("#myRadioList > div > input[value=myRadioName_val2]").prop('checked', true);
于 2012-02-27T16:39:11.803 回答
0

好吧,您在使用 jQuery 选择器时确实存在语法错误。它应该是:

$('#myRadioList > div > input[value="myRadioName_val2"]')
于 2012-02-27T16:36:02.977 回答