这应该是正确的代码但不起作用
<input type="radio" name="test">1
<input type="radio" name="test">2
$('input[name=test]').click(function() {
$('input[name=test]').attr(‘checked’,false);
});
这里的例子
编辑:
我忘记了该行应该说是否检查然后取消选中
答案 0 :(得分:5)
将.attr
更改为.prop
,它会正常工作。您还需要将“已检查”周围使用的引号更改为正确的类型,因为这也会导致它暂时中断:
$('input[name=test]').click(function() {
$(this).prop('checked',false);
});
您可以在此example fiddle中看到这一点。
更新(根据评论)
现在我实际上了解了所需要的东西,需要采用不同的方法。您需要记住checked
属性的先前值,方法是将其存储在属性中:
$('input[name=test]').click(function(e) {
var previous = $(this).attr('previous');
if(previous){
$(this).prop('checked', false)
}
$(this).attr('previous', $(this).prop('checked'));
});
请参见此工作here。
更新2 (基于进一步的评论)
来自第一次更新的上述代码不太起作用,因为当单击集合中的其他单选按钮时,先前检查的无线电的previous
属性仍然设置,但实际上未检查无线电。我们可以通过以下方式避免这种情况:
var previousElem;
$('input[name=test]').click(function(e) {
var previous = $(this).attr('previous');
if(previous && previousElem === this){
$(this).prop('checked', false);
}
previousElem = this;
$(this).attr('previous', $(this).prop('checked'));
});
答案 1 :(得分:1)
如果使用jQuery 1.6 +
,则删除'checked'属性$('input[name=test]').filter(':checked').prop('checked', false);
对于早期版本:
$('input[name=test]').filter(':checked').removeAttr('checked');
编辑以修复OP 实际问题,即如果当前选中的按钮是未选中的,则如何在集合中设置所有单选按钮点击,这是有效的(至少在Chrome 12中):
$('input[name=test]').click(function(e) {
// find out whether it was already checked
var wasChecked = $(this).data('checked') || false;
// ensure all buttons think they're unchecked
$('input[name=test]').data('checked', false);
if (wasChecked) {
// leave them all unchecked
this.checked = false;
} else {
// just check this one
this.checked = true;
$(this).data('checked', true);
}
});
的工作演示
答案 2 :(得分:1)
我知道这是一个老帖子,但我有一个更优雅的解决方案:
$('input[type="radio"]').mouseup(function () {
if ($(this).prop('checked')) {
$(this).one('click', function () {
$(this).prop('checked', false);
});
}
});
它将一个mouseup
处理程序附加到单选按钮。这是因为显然单选按钮的状态已在mouseup
和click
事件之间的某处更改。释放鼠标按钮时,我们知道单选按钮的当前状态。 仅如果已选中,我们会将一次性click
处理程序附加到取消选中它的单选按钮。
<强>更新强>
我为此做了jQuery plugin。它还支持单击标签并仅捕获鼠标左键单击。
答案 3 :(得分:0)
$('input[name=test]').prop('checked', false);
对于jQuery 1.6+,您可以使用.prop()
来表示这样的值:
当然,这是假设您的目标是诱使用户检查单选按钮的前景只是否认它们。