質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
checkbox

checkboxは、GUIのエレメントです。また、HTML<input>タグのtype属性で扱われる値を指します。

JavaScript

JavaScriptは、プログラミング言語のひとつです。ネットスケープコミュニケーションズで開発されました。 開発当初はLiveScriptと呼ばれていましたが、業務提携していたサン・マイクロシステムズが開発したJavaが脚光を浴びていたことから、JavaScriptと改名されました。 動きのあるWebページを作ることを目的に開発されたもので、主要なWebブラウザのほとんどに搭載されています。

Q&A

解決済

1回答

608閲覧

【チェックボックス同一ページ複数設置について】

1256497854

総合スコア2

checkbox

checkboxは、GUIのエレメントです。また、HTML<input>タグのtype属性で扱われる値を指します。

JavaScript

JavaScriptは、プログラミング言語のひとつです。ネットスケープコミュニケーションズで開発されました。 開発当初はLiveScriptと呼ばれていましたが、業務提携していたサン・マイクロシステムズが開発したJavaが脚光を浴びていたことから、JavaScriptと改名されました。 動きのあるWebページを作ることを目的に開発されたもので、主要なWebブラウザのほとんどに搭載されています。

0グッド

0クリップ

投稿2022/11/01 08:31

前提

【チェックボックス複数設置について】
htmlでサイトを作成しております。ページ内の申し込みフォームのテーブルにチェックボックスを複数設置して
各項目毎に「全て選択」ができるようにしたいのですが、
現状は全ての項目のチェックボックスが全て選択されてしまいます。

実現したいこと

各項目毎にそれぞれのチェックボックス全て選択させるにはどうすればいいでしょうか?初歩的な質問ですいません。
よろしくお願いします。(以下のような記述をコピペして複数配置しています)

発生している問題・エラーメッセージ

全項目がチェックされてしまいます

該当のソースコード

<form id="mailform" method="post" action="cgi-bin/mailform8/send.cgi" onsubmit="return sendmail(this);"> <tr> <td class="lead12px">受講学期 第一期:基礎編<br><span class="lead10px">(受講をご希望される時限にチェックする)</span></td> <td colspan="3"> <fieldset><label><span class="lead12px"> <input id="checkAll" type="checkbox" name="受講学期 第一期:基礎編" value="全て選択しました"> 全て選択する</span></label> <span class="lead12px"><br> <label> <input class="checks" type="checkbox" name="受講学期 第一期:基礎編" value="0時限"> 0時限</label> <label> <input class="checks" type="checkbox" name="受講学期 第一期:基礎編" value="1時限"> 1時限</label> <label> <input class="checks" type="checkbox" name="受講学期 第一期:基礎編" value="2時限"> 2時限</label> </fieldset> <script> //「全て選択」のチェックボックス let checkAll = document.getElementById("checkAll"); //「全て選択」以外のチェックボックス let el = document.getElementsByClassName("checks"); //全てのチェックボックスをON/OFFする const funcCheckAll = (bool) => { for (let i = 0; i < el.length; i++) { el[i].checked = bool; } } //「checks」のclassを持つ要素のチェック状態で「全て選択」のチェック状態をON/OFFする const funcCheck = () => { let count = 0; for (let i = 0; i < el.length; i++) { if (el[i].checked) { count += 1; } } if (el.length === count) { checkAll.checked = true; } else { checkAll.checked = false; } }; //「全て選択」のチェックボックスをクリックした時 checkAll.addEventListener("click",() => { funcCheckAll(checkAll.checked); },false); //「全て選択」以外のチェックボックスをクリックした時 for (let i = 0; i < el.length; i++) { el[i].addEventListener("click", funcCheck, false); } </script></td> </tr>

試したこと

ここに問題に対して試したことを記載してください。

補足情報(FW/ツールのバージョンなど)

ここにより詳細な情報を記載してください。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

yambejp

2022/11/01 08:46

「全て選択/全て解除」はチェックボックスじゃなくてボタンの方がよくないですか?
guest

回答1

0

ベストアンサー

グルーピングして遡ってチェックボックスを探す

javascript

1<script> 2document.addEventListener('click',e=>{ 3 const t=e.target; 4 if(t.matches('.check,.uncheck')){ 5 t.closest('fieldset').querySelectorAll('[type=checkbox]').forEach(x=>{ 6 x.checked=t.matches('.check'); 7 }); 8 } 9}); 10</script> 11<fieldset> 12<input type="button" value="全て選択" class="check"> 13<input type="button" value="全て解除" class="uncheck"> 14<label><input type="checkbox" value="1">1</label> 15<label><input type="checkbox" value="2">2</label> 16<label><input type="checkbox" value="3">3</label> 17</fieldset> 18<fieldset> 19<input type="button" value="全て選択" class="check"> 20<input type="button" value="全て解除" class="uncheck"> 21<label><input type="checkbox" value="1">1</label> 22<label><input type="checkbox" value="2">2</label> 23<label><input type="checkbox" value="3">3</label> 24</fieldset> 25<fieldset> 26<input type="button" value="全て選択" class="check"> 27<input type="button" value="全て解除" class="uncheck"> 28<label><input type="checkbox" value="1">1</label> 29<label><input type="checkbox" value="2">2</label> 30<label><input type="checkbox" value="3">3</label> 31</fieldset>

カスタムデータとクラスをつかって処理

javascript

1<script> 2document.addEventListener('click',e=>{ 3 const t=e.target; 4 document.querySelectorAll(t.dataset["check"]).forEach(x=>{ 5 x.checked=true; 6 }); 7 document.querySelectorAll(t.dataset["uncheck"]).forEach(x=>{ 8 x.checked=false; 9 }); 10}); 11</script> 12<fieldset> 13<input type="button" value="全て選択" data-check=".c1"> 14<input type="button" value="全て解除" data-uncheck=".c1"> 15<label><input type="checkbox" value="1" class="c1">1</label> 16<label><input type="checkbox" value="2" class="c1">2</label> 17<label><input type="checkbox" value="3" class="c1">3</label> 18</fieldset> 19<fieldset> 20<input type="button" value="全て選択" data-check=".c2"> 21<input type="button" value="全て解除" data-uncheck=".c2"> 22<label><input type="checkbox" value="1" class="c2">1</label> 23<label><input type="checkbox" value="2" class="c2">2</label> 24<label><input type="checkbox" value="3" class="c2">3</label> 25</fieldset> 26<fieldset> 27<input type="button" value="全て選択" data-check=".c3"> 28<input type="button" value="全て解除" data-uncheck=".c3"> 29<label><input type="checkbox" value="1" class="c3">1</label> 30<label><input type="checkbox" value="2" class="c3">2</label> 31<label><input type="checkbox" value="3" class="c3">3</label> 32</fieldset>

投稿2022/11/01 08:53

編集2022/11/01 09:01
yambejp

総合スコア114843

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

1256497854

2022/11/02 00:38

大変わかりやすい解説助かりました。ありがとうございます!
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問