Я думаю, это то, что вы ищете.Рассмотрим следующий код.
$(function() {
function setCheck(o, c) {
o.prop("checked", c);
if (c) {
o.closest("tr").addClass("checked");
} else {
o.closest("tr").removeClass("checked");
}
}
function setCheckAll(o, c) {
o.each(function() {
setCheck($(this), c);
});
if (c) {
$(".check_all").prop("title", "Check All");
} else {
$(".check_all").prop("title", "Uncheck All");
}
}
$(".check_all").on('change', function() {
setCheckAll($("tbody input[type='checkbox']"), $(this).prop("checked"));
});
$("tbody tr").on("click", function(e) {
var chk = $("[type='checkbox']", this);
setCheck(chk, !$(this).hasClass("checked"));
});
});
table {
border: 1px solid black;
border-collapse: collapse;
}
#table {
list-style-type: none;
margin: 0;
padding: 0;
width: 60%;
}
#table tr {
margin: 3px;
padding: 0.4em;
font-size: 1.4em;
height: 18px;
}
thead tr th {
background-color: #66e9ff;
font-size: 20px;
border: 2px solid black;
border-collapse: collapse;
}
tbody td {
min-width: 100px;
border: 1px solid black;
}
tbody td:first-child {
text-align: center;
}
tbody tr.checked td {
background-color: #ffbbbb;
color: dark;
}
tbody tr:hover {
background-color: yellow;
}
#feedback {
font-size: 1.4em;
}
table .ui-selecting {
background: #FECA40;
}
table .ui-selected {
background: #928bff;
color: white;
}
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
<table>
<thead>
<tr>
<th><input type="checkbox" class="check_all" value="Check All"></th>
<th>Header 1</th>
</tr>
</thead>
<tbody>
<tr>
<td><input type="checkbox"></td>
<td>Label 1</td>
</tr>
<tr>
<td><input type="checkbox"></td>
<td>Label 2</td>
</tr>
<tr>
<td><input type="checkbox"></td>
<td>Label 3</td>
</tr>
<tr>
<td><input type="checkbox"></td>
<td>Label 4</td>
</tr>
</tbody>
</table>
В основном у нас есть два сценария.Пользователь проверяет один элемент или пользователь выбирает проверить все.Для элемента, который отмечен, следует обновить родительский элемент <tr>
классом для стиля.Это должно быть в случае, если один элемент отмечен или не отмечен, или для всех элементов.
Я сделал небольшую функцию для выполнения этого для одного объекта.Затем я создал функцию, которая могла бы выполнить итерацию всех из них для сценария «Проверить все».Я отошел от .toggleClass()
, так как он мог запутаться между одной проверкой и проверкой всех.
Обновление
Я обновил приведенный выше код для работы одним нажатием кнопкистрока против простого нажатия на флажок.
Надеюсь, это поможет.