web-dev-qa-db-ja.com

jqueryチェックボックスの問題-無効になっているかどうかを確認しない

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

});

問題は、「すべて」をクリックすると、無効になっているものがまだチェックされているということです。私は何が間違っているのですか?前もって感謝します。

13
CFNinja

これは機能します:

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

宛先チェック無効以外のすべて

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

宛先チェックを外す無効以外のすべて

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

'disabled'属性にアクセスする代わりに、jQueryの ":disabled"フィルターを使用します。

5
Doug Domeny

うーん、私はおそらくこれを行うでしょう:


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

row_one、row_twoなど、すべての行に統一されたクラスを割り当てるだけです。

3
uji

これを試して:

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です([すべてチェック/チェック解除...]と表示されます。

これが誰かに役立つことを願っています!リチャード・レベロン

2
Rwakos

「すべて」のチェックボックスではなく、「すべてチェック/すべてチェック解除」にトグルボタンを使用する方がUIの方が良い場合があります。したがって、5つのチェックボックスではなく1つのボタン+4つのチェックボックス。そうすれば、無効にすることをいじる必要はありません。

1
Ray

これが古い投稿であることは知っていますが、無効になっていないすべてのチェックボックスをオンにしたいという別の同様の見方がありました。ただし、これによる影響を受けたくないチェックボックスが他にもいくつかあるため、それらを含む<div>のみをターゲットにする必要がありました。

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

チャームのように機能します。楽しんでください、誰かがこれが役に立つと思うことを願っています。

1
Drew

私も同じ問題を抱えていますが、なんとか解決できたので、問題はないと思います。ここに:

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

わかりやすいと思います。これ以上説明する必要はありません、私は推測します:Pしかし、遠慮なく質問してください:)

1
cik_imo