表題通りの内容です。
index.html
<head>
<!-- JQuery -->
<script src="https://ajax.googleapis.com/ajax/libs/jquery/3.4.1/jquery.min.js"></script>
</head>
<body>
<div>
<div class="all-check-box"><label><input type="checkbox" class="all-check" value="" name="all-check">全て</label></div>
<ul class="list">
<div class="form-check">
<input class="form-check-input" type="checkbox" value="" id="flexCheck1" />
<label class="form-check-label" for="flexCheck1">朝食</label>
<input class="form-check-input" type="checkbox" value="" id="flexCheck2" />
<label class="form-check-label" for="flexCheck2">昼食</label>
<input class="form-check-input" type="checkbox" value="" id="flexCheck3" />
<label class="form-check-label" for="flexCheck3">夕食</label>
</div>
</ul>
</div>
<script>
$(".all-check").on("click", function () {
$(this).parents(".all-check-box").siblings(".list").find(".form-check-input").prop('checked', this.checked);
});
$(".form-check-input").on("click", function () {
if ($(this).parents(".list").find(".form-check-input:checked").length == $(this).parents(".list").find("input").length) {
$(this).parents(".list").siblings(".all-check-box").find(".all-check").prop("checked", true);
} else {
$(this).parents(".list").siblings(".all-check-box").find(".all-check").prop("checked", false);
}
});
</script>
</body>
簡単な解説
sample1.js
$(".all-check").on("click", function () {
$(this).parents(".all-check-box").siblings(".list").find(".form-check-input").prop('checked', this.checked);
});
parentsで親要素を取得し、siblingsでall-check-boxの兄弟要素であるlistを取得する。
さらにfindでその子要素であるform-check-inputを全て対象にして、propでチェックされている状態を渡す。
sample2.js
if ($(this).parents(".list").find(".form-check-input:checked").length == $(this).parents(".list").find("input").length) {
$(this).parents(".list").siblings(".all-check-box").find(".all-check").prop("checked", true);
} else {
$(this).parents(".list").siblings(".all-check-box").find(".all-check").prop("checked", false);
}
チェックされているチェックボックスの要素数がチェックボックスの値と同じ場合、「全て」にチェックを入れる、そうでない場合はチェックを外す。
参考資料
jquery
gifアニメ
コメント
@f98sdj
0
これくらいであればjQueryを使うまでもないかな。