Jquery取消选中单选按钮不起作用

时间:2011-06-24 12:10:38

标签: javascript jquery

这应该是正确的代码但不起作用

<input type="radio" name="test">1
<input type="radio" name="test">2

$('input[name=test]').click(function() { 
    $('input[name=test]').attr(‘checked’,false);
});

这里的例子

http://jsfiddle.net/8jKJc/16/

编辑:

我忘记了该行应该说是否检查然后取消选中

4 个答案:

答案 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);
    }
});

http://jsfiddle.net/alnitak/qHepU/

的工作演示

答案 2 :(得分:1)

我知道这是一个老帖子,但我有一个更优雅的解决方案:

$('input[type="radio"]').mouseup(function () {
    if ($(this).prop('checked')) {
        $(this).one('click', function () {
            $(this).prop('checked', false);
        });
    }
});

它将一个mouseup处理程序附加到单选按钮。这是因为显然单选按钮的状态已在mouseupclick事件之间的某处更改。释放鼠标按钮时,我们知道单选按钮的当前状态。 如果已选中,我们会将一次性click处理程序附加到取消选中它的单选按钮。

<强>更新

我为此做了jQuery plugin。它还支持单击标签并仅捕获鼠标左键单击。

答案 3 :(得分:0)

$('input[name=test]').prop('checked', false);

对于jQuery 1.6+,您可以使用.prop()来表示这样的值:

Fixed jsFiddle

当然,这是假设您的目标是诱使用户检查单选按钮的前景只是否认它们。