идентификаторы должны быть уникальными. В вашем случае вы могли бы использовать номер строки запроса для создания уникального идентификатора с общим префиксом, как правило, это хорошая практика.
Вот CodePen, который работает https://codepen.io/Raven0us/pen/abvJqLP
<label for="checkbox-parent">Parent</label>
<input type="checkbox" onchange="func(event)" name="checkbox_parent" id="checkbox-parent">
<div>
<label for="checkbox-child-1">Child 1</label>
<input type="checkbox" name="checkbox_child_1" id="checkbox-child-1" class="checkbox-child">
<label for="checkbox-child-2">Child 2</label>
<input type="checkbox" name="checkbox_child_2" id="checkbox-child-2" class="checkbox-child">
<label for="checkbox-child-3">Child 3</label>
<input type="checkbox" name="checkbox_child_3" id="checkbox-child-3" class="checkbox-child">
</div>
Я изменил onclick
на onchange
, некоторые люди предпочитают click
, в основном по старым причинам (я думаю?), Но я бы не стал. Более того, я передал фактическое событие в функцию, поэтому оно доступно, если мы хотим проверить что-то о нем.
function func(event) {
document.querySelectorAll('.checkbox-child').forEach(checkboxChild => {
checkboxChild.checked = event.target.checked;
})
}
Обработчик получает все связанные флажки на основе общего класса, который может повторяться, в отличие от Идентификаторы, и l oop через возвращенный NodeList
и обновите их значение на основе значения родительского флажка. Таким образом, проверка или снятие флажка родитель также будет обновлять детей.