プルダウンメニュー(選択後直ちにジャンプするヴァージョン)の改良版で、こちらは選択肢を撰んだ後にサブミットボタンを押して貰う方法です。
この方法は以下のメリットがあります。
CGIと全く同じでは意味無いと思われるかも知れませんが、JAVAスクリプトはクライアントサイドで動作するため、CGIを利用するより遙かに速くて快適なレスポンスとなります。
スクリプトを実行できる環境なら、以下に代表的な検索エンジンへのプルダウンメニューが表示されます。
スクリプトを実行できない環境でも、以下に<noscript>要素でマークアップしている代表的な検索エンジンへのリスト形式メニューが表示されます。
この機能を実現するスクリプト「PullDownMenu2.js」は以下の通りです。
function goURLbySelect(u) {var i=u.options[u.selectIndex].value;if (i=='') {window.alert('選択肢を選んで下さい!'); return(false);}location.href=i;return(false);}document.write('<form action="#" method="post" onsubmit="return(goURLbySelect(document.forms[0].opt1)); "><div><select name="opt1">'+'<option value="">検索エンジン</option>'+'<option value="http://www.yahoo.co.jp/">ヤフージャパン</option>'+'<option value="http://www.google.co.jp/">グーグル日本</option>'+'<option value="http://www.infoseek.co.jp/">インフォシーク</option>'+'</select>'+' <input type="submit" " value="ゴー!" />'+'</div></form>');
このスクリプトは、フォームのサブミットボタンが押された際に呼出される函数「goURLbySelect()」の定義とdocument.write()メソッドでメニューとなるフォームを書出しているだけです。
今回は<select>要素の値が操作によって変わってもその時点ではジャンプしないため、<select>要素にonchange属性属性を入れて起動したりはしません。
その代わりに、サブミットボタンが押下された際に起動するonsubmit属性を<form>要素開始タグに入れてこれで函数「goURLbySelect()」を起動します。
尚、<a>要素などのように適切な論理イヴェントハンドラ(デヴァイス無関係のイヴェントハンドラ)が無い場合は、物理イヴェントハンドラ(デヴァイス依存のイヴェントハンドラ)を併用するしかありません。
goURLbySelect()」の仕組み。函数「goURLbySelect()」は、指定されたフォームの指定された<select>要素で選択されたURLへジャンプすると言う動作をします。
ここで問題になるのは、フォームからどのような形で指定のフォームと<select>要素を通知するのかと言う事です。
ここでは、HTML文書中0番目のフォームの「opt1」と言う名のついた<select>要素と言う情報を渡しております。
goURLbySelect(document.forms[0].opt1)尚、プルダウンメニュー(選択後直ちにジャンプするヴァージョン)と違って、thisでの指定は出来ません。
なぜなら、当該<select>要素外から呼出しているため、thisで指定すると全然違うオブジェクトを指定する事になるからです。
呼出元から受取った<select>要素のオブジェクトを元に、選択された値(選択された<option>要素のvalue属性値=ジャンプ先のURL)を取得し、それが空文字列の場合はwindow.alert()メソッドでエラーダイアログを出して戻ります。
そうでなければ、location.hrefプロパティにその値を入れる事でジャンプします。
初めにも解説しましたが、プルダウンメニューを実現するCGIを使える場合は、そのCGIを利用するフォームに組み込む事で、スクリプト実行可能環境でのパフォーマンスを向上させる事が出来ます。
この場合、スクリプトが実行出来ない環境であってもフォームは有効になるので、document.write()メソッドでフォームを書き出す必要は無く、直接HTML文書に書き出せば良いでしょう。
具体例を挙げておきます。
http://www.uso800.ne.jp/userID/cgi-bin/jump.cgi」で、CGIのパラメータは「addr」をポストする事でアドレスを指定するものとします。<script type="text/javascript" src="PullDownMenu2.js"></script><form action="http://www.uso800.ne.jp/userID/cgi-bin/jump.cgi" method="post" onsubmit="return(goURLbySelect(document.forms[○].addr)); "><div><select name="addr"><option value="">検索エンジン</option><option value="http://www.yahoo.co.jp/">ヤフージャパン</option><option value="http://www.google.co.jp/">グーグル日本</option><option value="http://www.infoseek.co.jp/">インフォシーク</option></select><input type="submit" value="ゴー!" /></div></form>
<form>要素のaction属性値は、CGIのURLとなります。
また、<select>要素のname属性値は、CGI側が指定している「addr」を使います。
最後に、<form>要素に埋め込まれたonsubmit属性では、HTML中○番目のフォーム内の「addr」と言う名のついた<select>要素を函数に引き渡します。
以上より、CGIを利用するフォームに組み込む場合は、
だけで良い事が分かります。
goURLbySelect()函数の冒頭でブラウザ判定を行ない、旧型ブラウザの場合は「return(true);」を実行させればいいでしょう(この場合、旧型ブラウザではCGIが起動します)。Copyright ©平成17年-平成24年 さいたま・しらぎくさいと 版権所有
marguerite.site@gmail.com