堀北真希うさぎ
主な作品
制作者に依るイラストと動画作品の例

ページ案内

プルダウンメニュー(ボタン入力を要するヴァージョン)。

プルダウンメニュー(選択後直ちにジャンプするヴァージョン)の改良版で、こちらは選択肢を撰んだ後にサブミットボタンを押して貰う方法です。

この方法は以下のメリットがあります。

手を滑らせて選択するつもりの無い項目を撰んでも、ボタンを押さない限りジャンプしない。
意思に反する動作が行なわれ得るのは、使い勝手と言う見地から好ましくありません。その意味でこの方法の方がベターでしょう。
スクリプトが動作しない環境でも有効に出来る(要CGI)。
プルダウンメニューを実現するCGIを用いているフォームに組み込めば、スクリプトが動作しない環境でも同等の機能を提供出来ます。

プルダウンメニュー(ボタン入力を要するヴァージョン)・目次。

プルダウンメニュー(ボタン入力を要するヴァージョン)のサンプル。

スクリプトを実行できる環境なら、以下に代表的な検索エンジンへのプルダウンメニューが表示されます。

スクリプトを実行できない環境でも、以下に<noscript>要素でマークアップしている代表的な検索エンジンへのリスト形式メニューが表示されます。

プルダウンメニュー(ボタン入力を要するヴァージョン)のサンプルスクリプトのソース。(平成17年 9月14日 修正)

この機能を実現するスクリプト「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>要素と言う情報を渡しております。

尚、プルダウンメニュー(選択後直ちにジャンプするヴァージョン)と違って、thisでの指定は出来ません。

なぜなら、当該<select>要素外から呼出しているため、thisで指定すると全然違うオブジェクトを指定する事になるからです。

実際の動作。

呼出元から受取った<select>要素のオブジェクトを元に、選択された値(選択された<option>要素のvalue属性値=ジャンプ先のURL)を取得し、それが空文字列の場合はwindow.alert()メソッドでエラーダイアログを出して戻ります。

そうでなければ、location.hrefプロパティにその値を入れる事でジャンプします。

応用・CGIと組み合わせる。

初めにも解説しましたが、プルダウンメニューを実現するCGIを使える場合は、そのCGIを利用するフォームに組み込む事で、スクリプト実行可能環境でのパフォーマンスを向上させる事が出来ます。

この場合、スクリプトが実行出来ない環境であってもフォームは有効になるので、document.write()メソッドでフォームを書き出す必要は無く、直接HTML文書に書き出せば良いでしょう。

具体例を挙げておきます。

<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>

まず、<script>要素で実行スクリプトを呼出します。

<form>要素のaction属性値は、CGIのURLとなります。

また、<select>要素のname属性値は、CGI側が指定している「addr」を使います。

最後に、<form>要素に埋め込まれたonsubmit属性では、HTML中○番目のフォーム内の「addr」と言う名のついた<select>要素を函数に引き渡します。

以上より、CGIを利用するフォームに組み込む場合は、

  1. 当該<form>要素より前に<script>要素でスクリプトを読込む
  2. 当該<form>要素にonsubmit属性を加える。

だけで良い事が分かります。

しらぎくのウェブサイト作成入門サイトマップ



marguerite.site@gmail.com