删除选中的复选框不起作用

时间:2013-04-30 14:47:48

标签: jquery

function removeSelection(button) {
    $('#a').bind('click', function() {
        if($(button).hasClass('checked')) { 
            alert("a");
            $(this).find('input:checkbox').attr('checked', 'false');
            $(button).removeClass("checked");
        }
        else {
            alert("b");
            $(this).find('input:checkbox').attr('checked', 'checked');
            $(button).addClass("checked");
        }
    }); 
}

行为:

first click - Alert('b')
second click  Alert('a') Alert('b')
third click   Alert('a') Alert('b') Alert('a')

应该是什么:

first click - Alert('b')
second click  Alert('a') 
third click   Alert('b') 

有什么问题?

2 个答案:

答案 0 :(得分:3)

如果您使用的是jQuery 1.9,请使用prop()代替attr()。并使用true和false进行检查和取消选中。

function removeSelection(button) {
    $('#a').bind('click', function() {
        if($(button).hasClass('checked')) { 
            alert("a");
            $(this).find('input:checkbox').prop('checked', false);
            $(button).removeClass("checked");
        }
        else {
            alert("b");
            $(this).find('input:checkbox').prop('checked', true);
            $(button).addClass("checked");
        }
    }); 
}
  

然而,最重要的概念要记住检查   属性是它与checked属性不对应。该   attribute实际上对应于defaultChecked属性和   应该只用于设置复选框的初始值。该   checked属性值不随状态而变化   复选框,而checked属性。因此,   跨浏览器兼容的方式来确定是否选中了复选框   使用属性Reference

答案 1 :(得分:0)

您必须从标记中删除“已检查”属性。这不是css的问题。

http://api.jquery.com/removeAttr/