вот мой пример кода
<table id="accessListTable">
<tr class="ui-grid groupHead">
<td><input type="checkbox" class="groupHeadCheck"/></td>
</tr>
<tr>
<td><input type="checkbox" id="1"/></td>
</tr>
<tr>
<td><input type="checkbox" id="2"/></td>
</tr>
<tr>
<td><input type="checkbox" id="3"/></td>
</tr>
<tr class="ui-grid groupHead">
<td><input type="checkbox" class="groupHeadCheck"/></td>
</tr>
<tr>
<td><input type="checkbox" id="4"/></td>
</tr>
</table>
groupHeadCheck
, все флажки с id
1, 2 и 3 также будут проверяться.Пожалуйста, помогите!
Я уверен, что это можно сделать красивее, но это основная идея:
$("table tbody").on("change", "input[type=checkbox]", function (e) {
var currentCB = $(this);
var isChecked = this.checked;
if (currentCB.is(".groupHeadCheck")) {
var allCbs = currentCB.closest('tr').nextUntil('tr.groupHead').find('[type="checkbox"]');
allCbs.prop('checked', isChecked);
} else {
var allCbs = currentCB.closest('tr').prevAll("tr.groupHead:first").nextUntil('tr.groupHead').andSelf().find('[type="checkbox"]');
var allSlaves = allCbs.not(".groupHeadCheck");
var master = allCbs.filter(".groupHeadCheck");
var allChecked = isChecked ? allSlaves.filter(":checked").length === allSlaves.length : false;
master.prop("checked", allChecked);
}
});
и если вам нужно запустить код, чтобы принудительно проверить все состояние
$(".groupHead").next().find("[type=checkbox]").change();
Вы можете добавить обработчик кликов в группу, а внутри обработчика вы можете найти его tr-элемент и следующий следующий элемент sibling до следующего появления tr.groupHead
$(function ($) {
$(".groupHeadCheck").on("click", function (event) {
$(this).closest('tr').nextUntil('tr.groupHead').find('input[type="checkbox"]').prop('checked', this.checked)
})
});
Демо: скрипка
groupHeadCheck
все флажки установлены. Но мне также нужно, если все флажки, такие как 1,2 и 3, уже установлены, будет проверен первый флажок groupHeadCheck
. У меня две страницы, такие как просмотр и редактирование.
Я знаю, что это уже ответили, но я хотел более общий способ сделать это. В моем случае я хотел проверить все в столбце, пока не ударил новую группу. У меня также было 3 столбца с флажками. В первом столбце флажка были имена, начинающиеся с "S_", второго "A_" и третьего "C_". Я использовал это, чтобы выбрать флажки, которые я хотел. Я также не назвал флажки заголовка, которые использовались для выполнения "проверки всех", чтобы он остановился, когда он попал в следующую группу группировок.
Вы можете использовать имя класса для применения той же логики.
Во-первых, вот что такое check all checkbox выглядит так:
<td>
<input type="checkbox" onchange="checkAll(this, 'S_');" />
</td>
Затем функция javascript вызывает при нажатии:
function checkAll(sender, match)
{
var table = $(sender).closest('table').get(0);
var selector = "input[type='checkbox'][name^='" + match + "']";
for (var i = $(sender).closest('tr').index() + 1; i < table.rows.length; i++)
{
var cb = $(table.rows[i]).find(selector).get(0);
if (cb === undefined)
break;
if ($(cb).is(':enabled'))
cb.checked = sender.checked;
}
}
Поэтому он будет искать каждую следующую строку для флажка с именем, начинающимся с "S_". Изменятся только те флажки, которые пользователь имеет права. Я собирался использовать $ (td).index(), чтобы найти правильный столбец, но это не сработало, потому что у некоторых строк было colspan больше 1.
Это проверит все, если первый флажок (или снимите отметку со всех)
$(document).on('click', '.groupHeadCheck',function() {
$(this).closest('tr').nextUntil('tr.groupHead').find('input[type="checkbox"]').prop('checked', $(this).prop('checked'))
});
вы можете немного поиграть со своими классами (или идентификаторами), чтобы сделать это правильно для вас