JQuery флажок проблема - не проверять, если он отключен - PullRequest
13 голосов
/ 12 ноября 2009

У меня есть 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 ]

15 голосов
/ 12 ноября 2009

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

 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'));
}
});
10 голосов
/ 03 ноября 2012

К отметьте все, кроме отключенных

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

К Снять отметку Все, кроме отключенных

$('input:checkbox:not(:disabled)').removeAttr('checked');
5 голосов
/ 12 ноября 2009

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

3 голосов
/ 13 ноября 2009

ммм, я бы, наверное, сделал это:


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

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

2 голосов
/ 03 августа 2011

Попробуйте это:

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 ...

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

1 голос
/ 29 августа 2016

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

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

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

1 голос
/ 24 октября 2011

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

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

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

1 голос
/ 12 ноября 2009

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...