jQuery检查和取消选中复选框

时间:2013-07-14 09:41:13

标签: jquery jquery-attributes

我必须选中并取消选中复选框。但它运作不佳。

示例:当第一次加载时状态为活动时:

  • 取消选中要处于非活动状态的复选框(正常工作)
  • 再次检查以使其处于活动状态(不工作,保持取消选中)

示例:当第一次加载时状态为非活动状态:

  • 选中要激活的复选框(正常工作)
  • 取消选中要处于非活动状态的复选框(正常工作)
  • 再次检查以使其处于活动状态(不工作,保持取消选中)

以下是我的示例代码:

var statusCheck = $('.status-box');

$.ajax({
    url: 'sample/url',
    type: 'POST',
    data: {
        user_id: ids,
        status: statusVal
    },
    success: function (response) {
        if (response == 'ok') {
            $.each(statusCheck, function () {
                var _this = $(this);

                if (_this.is(':checked')) {
                    _this.removeAttr('checked');
                } else {
                    _this.attr('checked', '');
                }
            });
        }
    }
});

2 个答案:

答案 0 :(得分:3)

我在使用JQuery检查和取消选中复选框时遇到了问题(奇怪的异常)。我使用.attr.removeAttr,当我将其更改为.prop('checked',false/true)时,我解决了问题。

  

在jQuery 1.6之前,.attr()方法在检索某些属性时有时会考虑属性值,这可能会导致行为不一致。从jQuery 1.6开始,.prop()方法提供了一种显式检索属性值的方法,而.attr()则检索属性。   Reference:

请注意,您应该使用JQuery 1.6 +

答案 1 :(得分:2)

var statusCheck = $('.status-box')

$.ajax({
        url     : 'sample/url',
        type    : 'POST',
        data    : { user_id: ids, status: statusVal },
        success : function( response ) {
            if( response == 'ok' ) {
                $.each(statusCheck, function(){
                    var _this    = $(this);

                    if( _this.is(':checked') ) {
                        _this.removeAttr('checked');
                    } else {
                        _this.attr('checked', 'checked');
                             // ...............^ here ^
                    }
                });
            }
        }
    });

试试这个:_this.attr('checked', 'checked');

Link.prop()也可以发挥魔力;)