入力フォームを構成するチェックボックスとなっている項目を全部選択或いは選択解除にするスクリプトです。
チェックボックスすなわち複数選択可能な選択肢に於いて、沢山の項目がある場合には全部選択するとなると全部項目を選択しなければならず、ちょっと不便です。
そこで、これらの項目をワンクリックで全部撰べるようにします。
逆に一から撰び直したいと言うときのために、ワンクリックで全部不選択にするようにも出来ます。
以下のフォームは、JAVAスクリプトを有効にしていれば、列車種別・その他の交通機関の直後に全部選択及び全部取消のボタンが現れます。
そして、
このサンプルスクリプト「CheckCheckBox.js」を実際に利用しているHTMLは以下のようになります。
サンプルスクリプトを作る上で特に重要な点は、全てのチェックボックスにname="type"属性と言う同じ値のname属性が与えられている事です。
尚、JAVAスクリプトが使えない環境でも、同様の機能を実現するため<noscript>要素で全部選択を指定する出来るチェックボックスを用意しました。
<form action="http://www.marguerite.jp/Nihongo/WWW/Back.cgi" method="post" class="important"><fieldset><legend>列車種別・その他の交通機関</legend><p>利用可能な列車種別などを以下から撰んで下さい。</p><script type="text/javascript" src="SetAllChecboxes.js"></script><noscript><dl><dt><label><input type="checkbox" name="type" value="ALL" />全部選択</label></dt><dd><samp>全部選択</samp>を指定した場合、以下の選択に関係なく全選択肢を選択したものとします。</dd></dl></noscript><ul><li><label><input type="checkbox" name="type" value="8" />新幹線</label></li><li><label><input type="checkbox" name="type" value="4" />特別急行</label></li>(中略)<li><label><input type="checkbox" name="type" value="16" />バス</label></li></ul></fieldset><fieldset><legend>発着地</legend><p>発着地を漢字で入力して下さい。</p>(中略)</fieldset><ul><li><input type="submit" value="検索" /></li></ul></form>
一方、サンプルスクリプト「CheckCheckBox.js」自身は以下のようになります。
// スクリプトを呼び出すHTMLを書き出す。document.write('<ul>'+'<li><input type="button" value="全部選択" onclick="allSelect(); return(false); " onkeypress="if (event.keyCode!=10) return(true); else { allSelect(); return(false); }" /></li>'+'<li><input type="button" value="全部取消" onclick="noSelect(); return(false); " onkeypress"if (event.keyCode!=10) return(true); else { noSelect(); return(false); }" /></li>'+'</ul>');// 全てのname="type"属性のinput要素を選択済みにする。function allSelect() {var f=document.forms[0].elements;var i=-1;while (++i<f.length) {if (f[i].name!='type') continue;f[i].checked=true;}}// 全てのname="type"属性のinput要素を不選択にする。function noSelect() {var f=document.forms[0].elements;var i=-1;while (++i<f.length) {if (f[i].name!='type') continue;f[i].checked=false;}}
このスクリプトは三部に分かれております。
一番目の
は単純にHTMLをdocument.write()メソッドで書き出すだけです。
書き出しているHTMLは二つの<input type="button">要素で、いずれも
return(false); でボタン処理を中断させるようにし、return(true); で当該キー入力処理を続行させ、return(false); でボタン押下処理を中断させるようにします。
二番目の
は、函数 allSelect() で実現します。
forms[0] オブジェクトの下位にある<input>要素などのオブジェクトの配列を forms[0].elements で取得して変数 f に代入します(つまり、変数 f は配列となります)。f の要素を零番目から f.length-1 で与えられる最大値まで一通り以下の事を行います。
type でなければ何もせずに次の要素の処理に移行します。type ならば、checkedプロパティに true 値を代入して強制的に選択されたものとします。
三番目の
は実はチェックボックスを全部選択する処理と殆ど変わりません。
ただ二つ違う点は、
noSelect() となる事name="type" 属性を持つ<input>要素のcheckedプロパティには false 値を入れて強制的に不選択とする事だけです。
この処理は、フォームのチェックボックスを確認するスクリプトと組み合わせると良いでしょう。
また、JAVAスクリプトが使えない環境のために、<noscript>要素で用意する代替コンテンツには全選択を表すチェックボックスも用意しておいて、CGI側でも当該ボックスが選択されている場合にはクエリの内容に拘らず全選択されたものとして処理するようにすると更に便利になるでしょう。
Copyright ©平成19年-平成24年 さいたま・しらぎくさいと 版権所有
marguerite.site@gmail.com