jQuery复选框问题 - 如果禁用了,请勿选中

14

我每行有5个复选框,第一个是“全部”。我想知道其他的是否被禁用。所以,如果有人点击了“全部”复选框,我需要确保被禁用的那些没有被选中。这是我的代码:

("input[name^=all_]").each(function() {
var input = $(this);   
var name = input.attr('name');    
var num = /\d+$/.exec(name)[0]; 
$(this).click(function() {

if ($('"#G"+num').attr('disabled',false)) {            
$("#G"+num).attr('checked', $("#all_"+num).is(':checked'));
}
if ($('"#E"+num').attr('disabled',false)) {         
$("#E"+num).attr('checked', $("#all_"+num).is(':checked'));
}
if ($('"#W"+num').attr('disabled',false)) {
$("#W"+num).attr('checked', $("#all_"+num).is(':checked'));
}
if ($('"#S"+num').attr('disabled',false)) {
$("#S"+num).attr('checked', $("#all_"+num).is(':checked'));
}
});

问题是,当我点击“全部”时,禁用的选项仍然被选中。我做错了什么?谢谢。

}


有趣的事情发生了如果(!$(“#G”+num).attr('disabled','disabled')){ $(“#G”+num).attr('checked',$(“#all_”+num).is(':checked')); } 如果(!$(“#E”+num).attr('disabled','disabled')){ $(“#E”+num).attr('checked',$(“#all_”+num).is(':checked')); } 如果(!$(“#W”+num).attr('disabled','disabled')){ $(“#W”+num).attr('checked',$(“#all_”+num).is(':checked')); } 如果($(“#S”+num).attr('disabled',false)){ $(“#S”+num).attr('checked',$(“#all_”+num).is(':checked')); } }); 它不会检查禁用框,但启用框将变为禁用状态。 - CFNinja
9个回答

17

这个可以工作:

 if ( !$("#G"+num).is(':disabled') ) {             
$("#G"+num).attr('checked', $("#all_"+num).is(':checked'));
}
if ( !$("#E"+num).is(':disabled')) {            
$("#E"+num).attr('checked', $("#all_"+num).is(':checked'));
}
if ( !$("#W"+num).is(':disabled') ) {
$("#W"+num).attr('checked', $("#all_"+num).is(':checked'));
}
if (!$("#S"+num).is(':disabled')) {
$("#S"+num).attr('checked', $("#all_"+num).is(':checked'));
}
});

10

检查除禁用外的所有内容

$('input:checkbox:not(:disabled)').attr('checked','checked');

取消选择所有除禁用外的内容

$('input:checkbox:not(:disabled)').removeAttr('checked');

5
使用jQuery的“:disabled”过滤器来代替访问“disabled”属性。

像这样吗?if (! $ ("#S"+num).filter(':disabled')) 这不起作用,活动按钮不会被选中。 - CFNinja

3

我会这样做:


    $('input[name=all]').click(function(){
        var classn = $(this).attr('class');
        $('.'+classn+':not(:disabled)').attr('checked', $(this).is(':checked'));
    });

只需为每一行分配一个统一的类,例如row_one、row_two等。

2

试试这个:

var all_checks = 0;

$(document).ready(function(){
    $("#all").click(function(){ 
    $('input:checkbox:not(:disabled)').attr("checked",!(all_checks==1));
         if (all_checks == 0){all_checks=1;} else {all_checks = 0;};
    });
});

#all是主复选框的ID(它可以选择/取消所有内容...)。

希望这能帮助某些人!Richard Reveron


1

我遇到了同样的问题,但我设法解决了它,而且我认为这个解决方案很好。在这里:

$("INPUT[@name="+children+"][type='checkbox']").attr('checked', $(parent).is(':checked'));
$("INPUT[@name="+children+"][type='checkbox'][disabled]").attr('checked', false);

我认为这很容易理解,不需要进一步解释,哈哈 :P 但是如果有问题,请随时问我 :)


1

我知道这是一篇旧文章,但我对此有一个类似的想法,我想检查所有未禁用的复选框。然而,我还有一些其他的复选框不希望受到影响,所以我需要仅针对包含它们的<div>进行操作:

$(function () {
    $('#checkAll').click(function () {
        $('#completed_modules').find(':checkbox:not(:disabled)').attr('checked', this.checked);
    });
});

非常好用。希望大家能喜欢,也希望这篇内容对某些人有所帮助。


1

使用切换按钮来“全选/取消全选”可能会更好,而不是使用“全部”复选框。因此,使用1个按钮+4个复选框代替5个复选框。这样就不必处理禁用问题。


该页面是从数据库输出创建的。每个记录都有不同的可用选项,因此我必须禁用复选框以指示该选项对于该特定记录不可用。不确定在我的情况下切换选项是否有效。 - CFNinja

0

我是用这种方式完成的。

<label class="checkbox-inline">
<input type="checkbox" id="check-all">
<span style="font-weight: bold">Check All</span>
</label>


<script type="text/javascript">
    $("#check-all").click(function () {
        $('input:checkbox').not(this).prop('checked', this.checked);
        $('input:checkbox:not(:enabled)').removeAttr('checked');
    });
</script>

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接