我似乎在使用jQuery选择单选按钮时遇到问题。我整理了一个simple Fiddle here来证明这个问题。这是我的HTML:
<div id="divRadioButtons">
<div style="width: 600px; margin: 5px auto;">
<div style="display: inline"><input type="radio" name="activeStatus" value="Active" id="rbActiveActive" checked="checked">Active</div>
<div style="display: inline"><input type="radio" name="activeStatus" value="Inactive" id="rbActiveInactive">Inactive</div>
<div style="display: inline"><input type="radio" name="activeStatus" value="ComingSoon" id="rbActiveComingSoon">Coming Soon</div>
</div>
</div>
<div style="display: inline-table">
<input type="button" value="Active" id="btnActive" />
</div>
<div style="display: inline-table">
<input type="button" value="Inactive" id="btnInactive" />
</div>
这是我的jQuery:
$(function() {
Reset();
$('#btnActive').click(function() {
Reset();
$('#rbActiveActive').attr('checked', true);
$('#rbActiveInactive').attr('checked', false);
$('#rbActiveComingSoon').attr('checked', false);
$('#divRadioButtons').show();
});
$('#btnInactive').click(function() {
Reset();
$('#rbActiveActive').attr('checked', false);
$('#rbActiveInactive').attr('checked', true);
$('#rbActiveComingSoon').attr('checked', false);
$('#divRadioButtons').show();
});
});
function Reset()
{
$('#divRadioButtons').hide();
$('#rbActiveActive').attr('checked', false);
$('#rbActiveInactive').attr('checked', false);
$('#rbActiveComingSoon').attr('checked', false);
}
当我点击Active
按钮时,我想要检查活动的单选按钮。当我点击Inactive
按钮时,我想要检查非活动单选按钮。
问题非常奇怪,因为请查看此问题。如果我运行我的小提琴并单击Inactive
按钮,它就可以了。但是,如果我第二次(或第三次或第四次)单击Inactive
按钮,它将取消选择它并且永远不会再次工作。如果我运行我的小提琴并选择Active
按钮,即使按钮代码相同,它也不会有效!
有人可以指出我正确的方向吗?我似乎在这个问题上撕裂了我的头发。
答案 0 :(得分:3)
简单,使用.prop()
代替.attr()
。
<强> jsFiddle example 强>
正如.prop()
所述的文档:
属性通常会影响DOM元素的动态状态 更改序列化的HTML属性。例子包括价值 输入元素的属性,输入的禁用属性和 按钮,或复选框的选中属性。 .prop()方法 应该用来设置禁用和检查而不是.attr() 方法
和...
要记住关于checked属性的最重要的概念是 它与checked属性不对应。属性 实际上对应于defaultChecked属性,应该使用它 仅设置复选框的初始值。已检查的属性 值不会随复选框的状态而改变,而 已检查的财产。