HTMLのチェックボックスに選択上限を設ける方法【Javascript × input[type=”checkbox”]】
投稿日:
このページにはGoogleアドセンス広告とアフィリエイト広告が含まれています。
本記事は執筆時点(2023年10月01日)の情報をベースにしております。掲載している情報が最新ではない可能性がありますので何卒ご容赦ください。
input[type="checkbox"]では選択できる数を制限できない?
入力フォームなどで複数の選択肢をユーザーに選んでもらいたい時に使用するinput[type="check"]ですが、選択可能な数を制限できるような属性値は用意されていないため全てにチェックを入れることもできてしまいます。
しかしフォームを作るうえでは、候補の中から2個や3個だけ選んでもらいたいという状況も多いのではないでしょうか?
今回はJavascriptを使ってチェックボックスに選択上限を設ける方法を解説します。
Javascriptで選択できる数に上限を設ける
チェックボックスに選択上限を設けるには、Javascriptを使ってチェックの数をカウントし設定した数を超えたらチェックできないようにします。
最終的なコードは次の通りです(コードの解説は後ほど)。プレビューのチェックボックスを操作してみてください。上限を「2」に設定しているので、3個目にチェックを入れようとするとメッセージが表示されます。
HTML
<div class="flex">
<!---->
<div class="box">
<input type="checkbox" name="myCheck" id="myCheck1" value="tokyo">
<label for="myCheck1">東京都</label>
</div>
<!---->
<div class="box">
<input type="checkbox" name="myCheck" id="myCheck2" value="kanagawa">
<label for="myCheck2">神奈川県</label>
</div>
<!---->
<div class="box">
<input type="checkbox" name="myCheck" id="myCheck3" value="saitama">
<label for="myCheck3">埼玉県</label>
</div>
<!---->
<div class="box">
<input type="checkbox" name="myCheck" id="myCheck3" value="chiba">
<label for="myCheck3">千葉県</label>
</div>
<!---->
</div><!--end flex-->
Javascript
var max = 2;
var checkbox = document.querySelectorAll("input[type='checkbox']");
for(var n = 0;n < checkbox.length;n++){
checkbox[n].addEventListener("change",function(elm){//チェックボックスにchangeイベントを登録
var checked = document.querySelectorAll("input[type='checkbox']:checked");//チェックの数を集計
if(max < checked.length){//3つめのチェックからはアラートを出してNGにする
alert("選択できるのは2つまでです。");
this.checked = false;
}else{
checked = document.querySelectorAll("input[type='checkbox']:checked");//取得し直す
var arr = [];
for(var i = 0;i < checked.length;i++){
arr.push(checked[i].value);
}//end for
document.getElementById("res").innerText = arr.join(',');
}//end if
},false);//end change
}//end for
プレビュー
Javascriptのコードの説明
1行目はじめにチェックボックスに設定したい上限を宣言します。
2~4行目ユーザーがチェックを入れるごとにカウントを行うように「change」イベントを登録します。
6~8行目条件分岐によって、チェックの数が1行目で設定した数を超えたらアラートを表示します。
9行目アラートを出すだけでは最後のチェックが有効になってしまうので、「this.checked = false」で取り消します。
11~16行目チェックの数が上限を超えていなければHTML上に選択中の選択肢を表示します。
まとめ
以上がJavascriptを使ってHTMLのチェックボックスに選択上限を設ける方法です。
チェックボックスを実用するとなると上限の設定が必要な場合が多いのではないでしょうか?基礎的なJavascriptのメソッドだけで作成できるので活用してみてください。
