Вот решение, которое (я думаю) делает то, что вы хотите.
(Использовал пример Ника в качестве отправной точки. Я вижу, что Ник опубликовал похожее решение, но этот подход использует другой подход.)
В дополнение к тому, что вы запросили, если вы нажмете кнопкуфлажок под .main_row
, он будет проверять / снимать все соответствующие .row
флажки.
Попробуйте: http://jsfiddle.net/nykda/
$(".row input").change(function() {
var $row= $(this).closest(".row");
var $main_row = $row.prev('.main_row').length ? $row.prev('.main_row') : $row.prevUntil(".main_row").prev();
$main_row.find(":checkbox").attr("checked", function(i,attr) {
return $main_row.nextUntil('.main_row').filter(':has(input:checked)').length ? "checked" : false;
});
});
$(".main_row input").change(function() {
$(this).closest(".main_row").nextUntil('.main_row').children(':checkbox').attr('checked', this.checked);
});