2009-11-12 44 views
13

我在每行有5个复选框。第一个是'ALL'。我正在尝试查看是否有其他人被禁用。所以,如果有人点击'ALL'复选框,我需要确保禁用的选项不被选中。这是我的:jquery复选框问题 - 不检查它是否被禁用

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

});

事情是,残疾人仍然会检查一次,我点击'全部'。我究竟做错了什么?提前致谢。

+0

有趣的事情发生了 如果(!$( “#G” + NUM).attr( '禁用', '禁用')){\t \t \t \t $( “#G” + NUM).attr( 'checked',$(“#all _”+ num)。是( ':检查')); \t} \t如果(!$( “#E” + NUM).attr( '禁用', '禁用')){\t \t \t \t $( “#E” + NUM).attr( '检查' ,$(“#all _”+ num).is(':checked')); ('#W“+ num).attr('disabled','disabled')){ } \t $(”#W“+ num).attr('checked',$( “#ALL _” + NUM)。是( ':检查')); (''S'+ num')。attr('disabled',false)){ } \t} \t $(“#S”+ num).attr('checked',$(“ #ALL _“+ NUM)。是( ':检查')); \t} \t}); 它不检查禁用的框,但启用的框变为禁用 – CFNinja

回答

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

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

+0

像这样?如果(!$(“#S”+ num).filter(':disabled')) 这不起作用,则不会检查活动按钮。 – CFNinja

1

这可能是更好的用户界面使用一个切换按钮“检查所有/取消所有”,而不是一个复选框为“ALL”。所以1个按钮+ 4个复选框而不是5个复选框。那么你将不必乱用禁用。

+0

从db输出创建页面。每个记录有不同的可用选项,所以我必须禁用复选框以指示该选项不适用于该特定记录。不确定,如果切换选项适用于我的情况。 – 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(它说选择/取消所有...

希望这有助于有人理查德Reveron

1

我!我得到了同样的问题,但我设法解决它&我认为这个解决方案很好,在这里:

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

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

10

检查以外的所有禁用

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

取消选中以外的所有禁用

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

我知道这是一个旧帖子,但我有另一个类似的采取它,我想检查所有未禁用的复选框。不过,我也有,我不想受这几个其他复选框,所以我需要的目标只是包含他们<div>

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

就像一个魅力。享受,我希望有人认为这有用。

+0

不错,谢谢分享。 – CFNinja

相关问题