Jquery checkbox - не проверять, отключено ли оно

У меня есть 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'));
}
});

});

Дело в том, что отключенные все еще проверяются, как только я нажимаю "ALL". Что я делаю не так? спасибо заранее.

Ответы

Ответ 1

это работает:

 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

Чтобы проверить все, кроме отключенных

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

В снимите флажок, кроме отключенного

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

Ответ 3

Использовать фильтр jQuery ": disabled" вместо доступа к атрибуту "disabled".

Ответ 4

umm, вероятно, сделаю следующее:


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

просто назначьте единый класс для каждой строки, скажем row_one, row_two и т.д.

Ответ 5

Попробуйте следующее:

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 - это идентификатор мастер-флажка (в котором говорится, что Check/Uncheck All...

Надеюсь, это поможет кому-то! Ричард Ревероон

Ответ 6

Возможно, лучше использовать пользовательский интерфейс для переключения "все/снять отметку", а не флажок "ВСЕ". Так что 1 кнопка + 4 флажка вместо 5 флажков. Тогда вам не придется возиться с отключением.

Ответ 7

У меня такая же проблема, но мне удалось ее решить, и я думаю, что решение в порядке. Здесь:

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

Я думаю, что это легко понять. Не нужно объяснять дальше, я думаю: P Но, пожалуйста, не стесняйтесь спрашивать:)

Ответ 8

Я знаю, что это старый пост, но у меня было другое подобное занятие, где я хотел проверить все флажки, которые не были отключены. Однако у меня также есть несколько других флажков, которые мне не нужны, поэтому мне нужно было указать только те <div>, которые содержали их:

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

Работает как шарм. Наслаждайтесь, я надеюсь, что кто-то найдет это полезным.