• ベストアンサー

特定のドロップダウンリストを表示させるには?

ホームページで、メールフォームの一部にドロップダウンリストを使用しています。通常はユーザーの方にリストから一つ選んでもらっているのですが、特定のリンク元からメールフォームのページに飛んだときにのみ、あらかじめ指定のリストを選択状態にしておきたいと考えています。 つまり、デフォルトのドロップダウンリストを表示させる場合と、それとは異なるリストを表示させる場合とを使い分けたいのですが・・・可能でしょうか。 HTMLか、JavaScriptか、CGIか・・・いろいろ調べてみたのですが、分かりませんでした。 どなたか、教えてください!!

質問者が選んだベストアンサー

  • ベストアンサー
  • metis
  • ベストアンサー率52% (86/165)
回答No.1

こんな感じでしょうか? //以下の行は、「//-->」の部分を除いてコメント行なので削除しても構いません。 あと、タブを消してありますので、ソースが見やすくなるように適当に追加してください。 -----[ソース(前後省略)]----- <script language="javascript"> <!-- //どのページから辿っても同じ表記になる部分 document.write('<select name="aaa">'); document.write('<option value="-">デフォルト</option>'); //特定のページから辿ると、デフォルト選択しておきたい選択肢 if (document.referrer.indexOf("/test.html")>0){ document.write('<option value="0" selected="selected">選択肢0</option>'); }else{document.write('<option value="0">選択肢0</option>');} //どのページから辿っても同じ表記になる部分 document.write('<option value="1">選択肢1</option>'); document.write('</select>'); // --> </script> <noscript> <select name="aaa"> <option value="-">デフォルト</option> <option value="0">選択肢0</option> <option value="1">選択肢1</option> </select><br> javascriptがオフになっています。 </noscript> -----[ソースここまで]----- javascriptをオフにしていたり、リファラをセキュリティソフト等で切っていると正しく機能しないと思いますが…。 (その場合、選択肢は表示されますが、思ったとおりの効果にはならないでしょう。javascriptをオフにしていると、<noscript>~</noscript>で囲った部分が、リファラを切っていると、直接指定したときと同じ様になります) この例では「test.html」から辿ってきたときに「選択肢0」を、それ以外の場合には一番上の「デフォルト」を選択するようにしてあります。 以上、参考までに。 あまりソースが綺麗じゃないですね…。申し訳ありません。

pakke
質問者

お礼

回答ありがとうございました! 書いていただいたソースを参考に、ページを修正してみました。 ・・・が、うまくいきません・・・。 何かやり方が間違っているのでしょうね・・・。 とりあえず、もう少しがんばってみます。 ソース、感謝です!ありがとうございました!

その他の回答 (2)

回答No.3

2つページを作ればHTMLだけでも初期表示状態を2つに分けることが出来ます。 一般のページ <a href="form1.html">フォームへ</a> form1.html <select> <option selected>選択肢1</option> <option>選択肢2</option> </select> 特定のページ <a href="form2.html">フォームへ</a> form2.html <select> <option>選択肢1</option> <option selected>選択肢2</option> </select> ページが2つになるということを避けるために、また、JavaScriptを止めている環境でも表示出来るように、一般的にはCGIを使うと思いますが、 JavaScriptでもSSIでもできます。

pakke
質問者

お礼

回答ありがとうございました! リストの数が多いので、リスト項目ごとにページを増やすのはやはり避けたいところです。 とりあえず、JavaScriptで試してみます。余裕があればCGIのほうが良さそうですが・・・。 勉強してみます。 ありがとうございました!

  • yambejp
  • ベストアンサー率51% (3827/7415)
回答No.2

>特定のリンク元からメールフォームのページに飛んだとき 元のページというのは通常リファラーとよばれています。 リファラーを判定するのはたいていPHPやCGIなどの サーバー側で動いているプログラムです。 また、元ページを参照するのではなく元ページで特定の パラメータをつけてメールフォームにとばし、そのパラメータの 値をみて、前のページを類推するという手法もあるでしょう。 (もちろん悪意のあるユーザーにパラメータを偽造されるリスクはありますが) その場合は、getやpostなどでパラメータをわたすか、クッキーや セッションなどの技術を使うのが一般的です。 これもサーバーサイドのプログラムで処理するのが主流ですが 無理をすればブラウザの機能のみで実現することも可能です。 (ブラウザの処理は確実性に乏しいのでおすすめできませんが)

pakke
質問者

お礼

回答ありがとうございました。 勉強になりました。 CGIで処理するのがよさそうですね。 特に、パラメータをつけて・・・という方法がいいんじゃないかと思いました。 今のところ、CGIより簡単なJavaScriptで試していますが、CGIのほうも勉強してみます。 ありがとうございました!