单选按钮html缺少checked属性,尽管Firebug指示它已被选中

Radio button html missing checked attribute, though Firebug indicates it is checked

本文关键字:指示 Firebug 尽管 缺少 html checked 属性 单选按钮      更新时间:2023-09-26

问题陈述摘要:浏览器上的单选按钮html不显示选中的属性,但Firebug表示单选按钮的选中属性设置为选中。

上测试

Brower: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');

我正在简化我的代码,以避免发布不必要的详细信息。

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

通常,最好让浏览器处理单选按钮和复选框的checked状态,而不是自己设置,否则会遇到这些问题。通过prop("checked").is(":checked")获取当前状态是安全的。

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

您应该使用

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

好吧,jQuery选择器中确实存在语法错误。应该是:

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