にしし ふぁくとりー(西村文宏 個人サイト)

Presented by Nishishi via Movable Type. Last Updated: 2015/09/22. 13:22:59.

短いJavaScriptで作るプルダウンメニュー

HTMLのフォームとJavaScriptを使って「プルダウンメニュー」を作ることができます。
具体的には、HTMLのselect要素(+option要素)でプルダウンメニューを作って、select要素に対して onClickイベントなり、onChangeイベントなりで、ページを移動するJavaScriptを書いてやれば良いわけです。簡単です。

で、たいていは、別に用意したページ移動用JavaScriptの関数を、onClickイベントかonChangeイベントで呼び出して使います。
でも、書くのが面倒くさいんですよね。^^;
普段は、「過去に既に書いたJavaScriptソース」をそのままコピー&ペーストすりゃいいんですけど、たまたまそういうデータのない環境で作業してたので、1から書かねばなりませんでした。

JavaScriptのリファレンスもないし、ネット接続環境もない。そういうところで、プルダウンメニューを実現するJavaScriptを1から書く。
なかなか面倒です。
…というわけで、なんとか短く書く方法はないものだろうかと(笑)頭を悩ませていましたら、以下のようなソース(HTML&JavaScript)を思いつきました。

<form id="selectmenu">
   <select id="menu" onChange="location.href = value;">
      <option value="index.html">Select</option>
      <option value="page1.html">ページ1</option>
      <option value="page2.html">ページ2</option>
      <option value="page3.html">ページ3</option>
   </select>
</form>

これだけ。
一見、JavaScriptなんて存在しないように見えるかも知れませんが、2行目の

<select id="menu" onChange="location.href = value;">

onChange属性の中身がJavaScriptです。
いやあ、たったこれだけでも、プルダウンメニューとしてページ移動機能が実現できるんですねえ。^^;;;

※location.hrefというのは、アクセスしてるページ(URL)のこと。こいつにアクセスさせたいURLを代入すれば、そこに移動させられます。

JavaScriptを別途関数にすると、「value」属性の値を取得する記述が面倒なんですよね。「value」と書いただけじゃ、どこのvalueなのかが特定できないので当然ダメで、documentの中のformの中のselectの中の…みたいな記述をしないといけません。

でも、select要素の中にJavaScriptを書く場合は、ただ「value」と書けば、そのselect要素のvalueを拾ってくれるんじゃないかな?と思ったんです。(^_^;)
当たりでした。

もっとも、この記述方法が、どれだけのブラウザで正しく動くのかは未確認なんですが。^^; IEとFirefoxしか導入されてない環境で作ったので。(^_^;)
今、Macでのテスト環境を持ってないので、Macユーザの方々、試してみて下さい。^^;

Select Contents:

リファレンスのない環境で頭をひねると、短いコードが書けるのかな。(笑)

コメント

はじめまして。
今、HPでプルダウンメニューを作ろうとしているのですが、
どのプルダウンメニューの作り方を読んでみても大体は
プルダウンメニューのおいてあるページそのものが
選択メニューページに変わってしまうものばかりでした。

自分の作りたいページのイメージは、
まずフレーム枠を上下に作り、
上のフレーム内にプルダウンメニューを置き、
下のフレーム内にプルダウンメニューで選んだページを
表示させたいと考えているのですが、
これは可能なのでしょうか。

どこをみてもみんな プルダウンメニューの置いてあるページから選択ページへと切り替わってしまうものばかりだったので、
自分が考えているようなページは作れないんじゃないかとさえ
考え始めているところです。

もし可能でしたら、教えていただけると幸いです。
comment欄に質問を書いてしまい恐縮ですが
よろしくお願いいたします。

投稿者 kinoko : 2007年02月26日 13:45

parent.フレーム名.value
でフレーム指定が可能ですので、
parent.下フレーム名.location.href = value;
で下フレームの表示ページが変わるはずです。

投稿者 Anonymous : 2007年11月09日 15:46

大変遅くなってしまいましたがありがとうございました!

投稿者 kinoko : 2008年03月15日 13:10

こんにちは。
初めまして。
短くて判りやすい、プルダウンメニューに感激です。

是非、作成中のホームページで使わせていただきたいと思います。さて、さっそくですが、フレームの左側にプルダウンを設置し、右のフレーム内の内容のみ変化させたく思います。

先の質問者さまにご回答の通り、フレーム名を書くことで反映されます。しかし、もともとの左フレームまでが消えてしまいます。

この状態は、改善できますでしょうか。
初歩的な質問で申し訳ありません。
お時間の赦す折りに、ご教示いただければ幸いです。

投稿者 村上芽理 : 2009年07月12日 20:40

村上芽理さん、こんにちは。

対象のフレーム名を指定したのなら、それ以外のフレームは変化しないと思うので、他のフレームにまで影響してしまうなら、何か別の記述が機能しているか、書き方が間違っているかが原因だと思います。

具体的にどんなJavaScriptソースを書かれたのか、また対象のHTMLはどんなソースなのか……をお知らせいただければ、分かるかも知れません。

投稿者 にしし : 2009年07月17日 22:53

こんにちは。
お返事有り難うございます。
本当に古い記事ですのに、質問をさせていただいて、申し訳ありません。

ソースをここにコピーしたのですが、確認ページで見ると、反映されません。
これでは、どこが間違っているのかご教示いただけませんね・・・。

大変お手数をおかけ致しました。
もう少し自分で頑張ってみます。
お返事、本当に有り難うございました。

投稿者 村上芽理 : 2009年07月18日 16:22

スパム防止のためにHTMLタグは書けなくしてあるのです。ごめんなさい。(^_^;)
タグの記号を使わなくて済む部分だけをお知らせいただければ、なんとかなるかも知れません。
もしくは、どこかのウェブ上に公開されているなら、URLを(URL欄に)お書きいただければ拝見できますが。

ちなみに、
parent.location.href = "hogehoge.html";
と書くと、フレームを(1段階)解除してhogehoge.htmlが表示されます。
こう書いていると、元々の左フレームも消えてしまうことになりますが……、どうでしょう?

投稿者 にしし : 2009年07月19日 19:40

こんにちは。
お返事を有り難うございます。
事故に遭って入院してしまい、ご連絡が遅くなりました。
申し訳ありません。

ご教示の通りで、完璧に表示ができました。
本当に、今頃なんだよ・・・という感じですが、
まずは御礼まで。
お世話になりました。
これからも、ホームページ作り、頑張って下さい。
私もリハビリしつつ、頑張ります。

投稿者 村上芽理 : 2010年02月11日 19:49

村上芽理さん、こんにちは。
わざわざご返信をどうもありがとうございます。
入院とは大変でしたね。

無事に表示できたようで何よりです。
リハビリも頑張って下さい!

投稿者 にしし : 2010年02月13日 23:42

コメント数: 9件

コメント投稿欄 この日記に対するコメント投稿を歓迎します。

保存しますか?



※本文中にURLは書けません。(書くと投稿が拒否されますのでご注意下さい。)

※投稿内容は、実際にページ上に掲載される前に、管理者によって確認される設定にしている場合があります。その場合は、投稿後にその旨が表示されます。たいてい1~2日以内には表示されるはずですので、気長にお待ち願います。m(_ _)m

トラックバック

このエントリーへのトラックバックURLを表示するにはここをクリック
※スパム防止のため、トラックバックURLは別ウインドウで表示します。(JavaScriptが有効でないと表示されません。)

--- 当サイト内を検索 ---