この解答例はChatGPTによって生成されています,正しいかは自己判断で。 皆の投稿からも解答例が見つかるかもしれませんよ。
BFE.devでのAI解答例 - フロントエンドシステムデザイン
20. Implement nested checkboxes
答え:
以下は実装の例です。
HTML:
<label> <input type="checkbox" id="parentCheckbox"> Parent Checkbox</label><ul> <li> <label> <input type="checkbox" class="childCheckbox"> Child Checkbox 1 </label> </li> <li> <label> <input type="checkbox" class="childCheckbox"> Child Checkbox 2 </label> </li> <li> <label> <input type="checkbox" class="childCheckbox"> Child Checkbox 3 </label> </li></ul>
JavaScript:
const parentCheckbox = document.querySelector('#parentCheckbox');const childCheckboxes = document.querySelectorAll('.childCheckbox');function updateParentCheckbox() { const checkedChildCheckboxes = document.querySelectorAll('.childCheckbox:checked'); if (checkedChildCheckboxes.length === 0) { parentCheckbox.checked = false; parentCheckbox.indeterminate = false; } else if (checkedChildCheckboxes.length === childCheckboxes.length) { parentCheckbox.checked = true; parentCheckbox.indeterminate = false; } else { parentCheckbox.checked = false; parentCheckbox.indeterminate = true; }}parentCheckbox.addEventListener('click', () => { childCheckboxes.forEach((checkbox) => { checkbox.checked = parentCheckbox.checked; });});childCheckboxes.forEach((checkbox) => { checkbox.addEventListener('click', () => { updateParentCheckbox(); });});
このコードでは、parentCheckbox
のクリックイベントをリッスンし、子チェックボックスの状態を更新します。 childCheckboxes
の各チェックボックスにもクリックイベントがリッスンされます。updateParentCheckbox()
は、子チェックボックスがクリックされるたびに呼び出され、親チェックボックスの状態を更新します。親チェックボックスには、checked
とindeterminate
プロパティがあります。特定の状態に設定すると、それに応じて表示される状態が変わります。