代码之家  ›  专栏  ›  技术社区  ›  Kung Fu Ninja

jquery复选框问题-不检查是否已禁用

  •  13
  • Kung Fu Ninja  · 技术社区  · 16 年前

    我每行有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'));
    }
    });
    

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

    8 回复  |  直到 16 年前
        1
  •  16
  •   Kung Fu Ninja    16 年前

    这项工作:

     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'));
    }
    });
    
        2
  •  10
  •   Serjas Matt    12 年前

    到 除残疾人外的所有人

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

    到 除残疾人外的所有人

    $('input:checkbox:not(:disabled)').removeAttr('checked');
    
        3
  •  5
  •   Doug Domeny    16 年前

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

        4
  •  3
  •   uji    16 年前

    嗯,我可能会这样做:

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

        5
  •  2
  •   Rwakos    15 年前

    试试这个:

    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(表示选中/取消选中全部。。。

    希望这对别人有帮助!理查德·里沃伦

        6
  •  1
  •   Ray    16 年前

    最好使用切换按钮“全部选中/全部取消选中”,而不是“全部”复选框。因此,1个按钮+4个复选框,而不是5个复选框。这样你就不必为禁用而烦恼了。

        7
  •  1
  •   Junuxx    14 年前

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

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

        8
  •  1
  •   Drew    10 年前

    <div> 其中包括:

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