复选框选择/取消选择触发器第一次工作,但在随后的尝试中失败

Checkbox select/deselect trigger works first time but fails on subsequent attempts

本文关键字:选择 失败 取消 触发器 第一次 工作 复选框      更新时间:2023-09-26

我有一块jQuery,它基于html数据*标签来处理搜索表单组中的复选框。

单击"全部"复选框,其余所有复选框都将被取消选中(这每次都有效,没有问题)。

现在,如果选择了"全部",并且单击了其他选项,则"全部"应变为未选择,这也可以正常工作。

但是,如果您愿意,您可以取消选择"全部"复选框,然后默认为选中其余复选框,这样您就可以取消选择所需的结果。

如果到目前为止你还没有更改任何其他复选框,这是第一次有效,但如果选择了任何其他复选栏"全部",或者如果你已经单击了"全部"按钮,如果选择失败,则再次取消选择。

<input data-sel-group='group1' id='group1_all'/>
<input data-sel-group='group1' id='group1_1'/>
<input data-sel-group='group1' id='group1_2'/>
$('input:checkbox').on('click',function(){
var sel = $(this).data('sel-group'),
    all = $('#'+sel+'_all'),
    chk = all.is(':checked');
    if($(this).attr('id')==all.attr('id')){
        if(chk){
            $('input[data-sel-group="'+sel+'"][id!="'+sel+'_all"]').attr('checked', false);
        }else{
            $('input[id!="'+sel+'_all"][data-sel-group="'+sel+'"]').attr('checked', true);
        }
    }else{
        all.attr('checked', false);
        if($('input[data-sel-group="'+sel+'"]:checked').length<=0){
            all.attr('checked', true);
        }
    }
})

使用.prop()而不是.attr()

$(selector).prop('checked', true/false);

还可以查看.pr()与.attr()

您应该在设置checkbox属性为checked时使用延迟执行。请参阅此博客