jquery复选框问题 - 不要检查它是否被禁用

时间:2009-11-12 16:47:57

标签: jquery checkbox

我每行有5个复选框。第一个是'ALL'。我试图看看是否有其他人被禁用。因此,如果有人点击“全部”复选框,我需要确保未选中已禁用的复选框。这就是我所拥有的:

("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'));
}
});

});

问题是,一旦我点击“全部”,残疾人仍然会被检查。我究竟做错了什么?提前谢谢。

8 个答案:

答案 0 :(得分:15)

这有效:

 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'));
}
});

答案 1 :(得分:10)

检查除禁用以外的所有内容

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

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

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

答案 2 :(得分:5)

使用jQuery的“:disabled”过滤器,而不是访问“禁用”属性。

答案 3 :(得分:3)

嗯,我可能会这样做:


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

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

答案 4 :(得分: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

答案 5 :(得分:1)

使用切换按钮“检查全部/取消选中所有”而不是“全部”的复选框可能是更好的UI。所以1个按钮+ 4个复选框而不是5个复选框。那么你就不必搞乱了。

答案 6 :(得分:1)

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

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

我认为这很容易理解。我猜不需要进一步解释:P 但请不要犹豫,问:)

答案 7 :(得分:1)

我知道这是一个旧帖子,但我还有另一个相似的内容,我想检查所有未禁用的复选框。但是,我还有其他一些我不希望受此影响的复选框,因此我只需要定位包含它们的<div>

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

像魅力一样工作。享受,我希望有人觉得这很有用。