ワンクリックでチェックボックスの全選択や全解除をできるようにする
フォームのチェックボックスの数が多いときにあると便利な、ワンクリックで全選択や全解除できる機能をJavaScriptで作る機会があったので、その方法を備忘録として残しておきます。
実装したのは、「すべて選択」にチェックを入れると、文字通りすべてのチェックボックスにチェックが入り、反対に「すべて選択」のチェックを外すと、すべてのチェックボックスのチェックが外れるという仕様です。
完成イメージは以下の通りです。
サンプルコード
先ほどのサンプルのソースコードを記載します(不具合がない保証はできませんのでご容赦ください)。
HTMLの例
まずはHTMLです。
5行目フォームのパーツとは切り離して、全選択(全解除)用のチェックボックスを用意しています。
この要素にonchange属性を設定し、ユーザーがチェックを入れたり外したりするたびにJavaScriptによる処理が発火するようにします。引数に「this.checked」を指定することでチェック状態(true/false)を関数に渡してます。
9行目フォーム内のチェックボックスに関しては特別なことはせず、通常のチェックボックスを並べているだけです。
HTML
<div id="test"> <ul> <li> <label> <input type="checkbox" onchange="checkClear(this.checked)">すべて選択 </label> </li> </ul> <form method="post" action=""> <ul> <li> <label> <input type="checkbox" name="myCheck" value="">東京都 </label> </li> <li> <label> <input type="checkbox" name="myCheck" value="">埼玉県 </label> </li> <li> <label> <input type="checkbox" name="myCheck" value="">千葉県 </label> </li> <li> <label> <input type="checkbox" name="myCheck" value="">神奈川県 </label> </li> <li> <label> <input type="checkbox" name="myCheck" value="">茨城県 </label> </li> <li> <label> <input type="checkbox" name="myCheck" value="">栃木県 </label> </li> <li> <label> <input type="checkbox" name="myCheck" value="">群馬県 </label> </li> </ul> </form> </div><!--end test-->
JavaScriptの例
続いてはJavaScriptのソースコードです。
HTML側で用意したonchange属性によって発火する関数を作成します。
1行目引数「checked」は全選択用チェックボックスのチェック状態を「true」か「false」で受け取ります。
2行目JSで操作するチェックボックスをセレクターで指定します。
3行目全選択用チェックボックスのチェック状態に応じた条件分岐で処理を書きます。「true」は全選択のチェックを入れた時なので全選択にする処理、「false」は全選択のチェックを外したタイミングなのですべてのチェックを外す処理を用意します。
4行目チェックボックスの個数分ループを使います。「n」個目のチェックボックスの「checked」を「true」に設定することでチェック状態にできます。
6行目最後に、全選択のチェックを外した時の処理(すべてのチェックを外す)も用意します。4行目と同様にループを使い、今度は「checked」を「false」にしてチェックを外すようにしています。
JavaScript
function checkClear(checked){ var checkbox =document.querySelectorAll('input[name="myCheck"]'); if(checked === true){ for(var n = 0; n < checkbox.length; n++){ checkbox[n].checked = true; }//end for }else if(checked === false){ for(var n = 0; n > checkbox.length; n++){ checkbox[n].checked = false; }//end for }//end if }
まとめ
以上が、JavaScriptでチェックボックスの全選択全解除を行う方法です。
数個だけのチェックボックスであれば一つ一つチェックを入れていっても負担にはなりませんが、チェックボックスが何十個もあり、全部にチェックが入る可能性があるのであれば「すべて選択」ボタンを用意しておいた方がユーザビリティが高まります。