• 締切済み

検索ページでの、submitのコントロールについて

イントラのFAQページに全文検索システムを作っています。 CGI(Namazu)を利用したこの検索環境は正常に動作していますが、この検索を実行するHTMLページの作成で悩んでいます。 以下が現在の検索用フォームです。 <form method="GET" action="/scripts/search/namazu.cgi.exe"> <select name="query"> <option value="分類アパッチ">Apache <option value="分類デスクネッツ">desknet's : </select> <input type="submit" name="idxname" value="Search!"> <input type="hidden" name="whence" value="0"> <input type="hidden" name="idxname" value="all"> </form> 上記は「『all』インデックスファイル内から、プルダウンで選択した項目のvalue値を検索」するためのフォームなのですが、結論としては、「検索者が任意に選択したインデックスから、プルダウンで選択したテキスト部(「Apache」や「desknet's」)を検索値として検索」するようにしたいのです。 以下のようなプルダウンにすることでインデックスを任意に選ぶことはできるのですが、そうすると、今度はどうやって検索値をCGIに送ることができるのかがわかりません。 <select name="idxname"> <option name="idxname" value="apache">Apache <option name="idxname" value="desknets">desknet's : </select> 分かり難い説明で恐縮ですが、どなたかご教示いただけますようよろしくお願いいたします。

みんなの回答

  • rentahero
  • ベストアンサー率53% (182/342)
回答No.5

なんかゴチャゴチャやっとるなあ。 http://www.example.com/scripts/search/namazu.cgi.exe?idxname=all&whence=0&query=分類アパッチ で全部のindexから"分類アパッチ"を検索するってことでしょ? んで、 http://www.example.com/scripts/search/namazu.cgi.exe?idxname=apache&whence=0&query=アパッチ でapacheインデックスから"アパッチ"を検索するってことでしょ? 難しく考えるのやめて、最初から整理してみたらどう? <form method="GET" action="/scripts/search/namazu.cgi.exe"> <input type=text name=indexname> <input type=text name=query> <input type="submit" value="Search!"> <input type="hidden" name="whence" value="0"> </form> </select> a)idxname=apache&query=アパッチ b)idxname=desknets&query=デスクネッツ まとめたら、上記フォームのの二つのinputタグに、下のa)やb)の組み合わせでデータが入るようにしたいということでしょう。 そしたら、二つともinput にして selectタグをformの外に出して、あとはjavascriptでできるのでは?

回答No.4

あ、なるほど。 そういう事ですか。 1:については文章を読み違えていたようで 申し訳なかったです。 kae_mさんのCGI熟達度は分かり兼ねますし、 私のCGIの知識などはお笑い種なレベルですので 微妙かも知れませんが… html側でsubmitされ、CGIへ処理が渡された時には フォームの内容はCGIがすべて受け取る事はできないのでしょうか? できるはずだとは思うのですけれど。 やりたいことが 単に 『プルダウンで選択した項目を検索』 なのであれば、 わざわざhiddenフィールドに値を渡すまでも無いのでは? どうしてもhiddenに渡して処理がしたいのであれば selectタグのonchange、もしくはformのonsubmit時に onchange="query.value = idxname[idxname.selectedIdx].value" もしくは onsubmit="query.value = idxname[idxname.selectedIdx].value" で解決できませんでしょうか? まぁ、onchange時にはidxnameをthisとしても いいんでしょうけれど。 hiddenフィールドの値が取得できるのであれば selectで選択された値も取得できると思うので hiddenに値を渡すのは明らかにスマートではないかと。 以上、簡単ですが回答まで。 分からない事があれば 遠慮なさらずに聞いてくださいね。

kae_m
質問者

お礼

本当に、とても早いご回答ありがとうございます! ・・・それなのに、とても心苦しいのですが、今、ちょっと別の仕事が入ってしまったため、少しこの件から離れます。 2~3日でまた戻りますので、どうぞよろしくお願いします。

回答No.3

補足説明ありがとうございました。 まずは指摘を。 submitのvalueが、submitボタンの表示になっているのは ご存知でしょうか? 提示されているhtmlソースにも <input type="submit" name="idxname" value="Search!"> と書かれていますよね? これならばsubmitボタンの表示は Search! となっているはずです。 これを idxname.value = "hogehoge" とすると submitボタンの表示は hogehoge となってしまう事は お分かりになりますか? それがお分かり頂けたのであれば 1.submitボタンのvalue値に、プルダウンで任意に選択した<option>タグ外のカタカナ部を自動的に代入する方法 2.submitボタンの表示を「Search!」に固定する方法 の2つはご推測通り相容れないものであると 理解して頂けると思います。 そこで ここはひとつ、要件を整理してみましょう。 私が推測するにkae_mさんが本当にしたい事というのは 1:submitボタンの表示をプルダウンで選択された項目の日本語表示と同じにする 2:プルダウンで選択された項目を検索値にCGIを動かす という事ではないでしょうか? もし上記でよろしいのでしたら お急ぎという事もあるので、早急にお答え致しますので お返事お願い致します。

kae_m
質問者

補足

本当に色々ありがとうございます。 昨日から本日までご指導いただいたことを改めて読み直し、大分頭の中が整理できてきました。 改めて見つめなおした結果、hiddenを追加するなどして、このように変更してみました。 1 <select name="idxname"> 2 <option name="apache(*)" value="apache">apache 3 <option name="desknet's(*)" value="desknets">desknet's 4 : 5 </select> 6 <input type="submit" name="submit" value="Search!"> 7 <input type="hidden" name="query" value="(*)"> 1:について・・・ submitの表示は、いつでも[Serch!]のままにしておきたいのです。 shime-sabaさんのおかげで<input>タグひとつに、valueの役割を2役担わせるわけにはいかない、ということが改めて納得できたこと、またhiddenをうまく使う必要があると感じたことから、上記のように2つのコントロールを6行目と7行目に分けてみました。 これで、submitの表示はいつも[Search!]のままで検索を実行できるようになっていると思います。 2:について・・・ その通りです。(ただし、それと同時に「name="query"」も送らなければなりません。) 一応、上記で作成した7行目が、該当するタグとなっているつもりです。 このvalue値(*)に、プルダウンメニューで選択した項目のname値(*)を代入できれば良いのかと思うのですが、これがうまくいかず・・・ そもそも基礎がなっていないことでお手を煩わせています。本当にすみません。 どうぞよろしくお願いいたします。

回答No.2

あ、書き忘れていました。 できるだけvalueには2バイト文字を 使用しないようにした方がいいと思います。

kae_m
質問者

お礼

そうだったんですか。知りませんでした。 ただ、今回はこの検索システムの都合で、どうしても2バイト文字を使わなくてはならず・・・ 不都合が出た時に改めて対策を考えます。 大変貴重なアドバイスありがとうございました!

回答No.1

CGIの知識はほぼ皆無ですので あまりお力にはなれないかと思いますが・・・。 作成されている全文検索システムは 入力フォームはないのでしょうか? 上記のソースには提示されていませんでしたので プルダウンで選択された項目の value値を渡す方法のみを。 onsubmit時に hiddenにでも値を放り込んでやればいいのでは? hiddenフィールドを仮にhdnとして、 onsubmit="hdn.value = idxname.value;" といった感じでいかがでしょうか。

kae_m
質問者

お礼

早速のご回答ありがとうございました。 value値は、正しく渡せているようなのです。私の書き方が悪いですよね。すみません。 今考えているのは、以下のような形にすることです。 <select name="idxname"> <option name="idxname" value="apache">アパッチ <option name="idxname" value="desknets">デスクネッツ : </select> <input type="submit" name="query" value="Search!"> <input type="hidden" name="whence" value="0"> こうすると、例えばプルダウンから「アパッチ」を選択した時、検索システムは「apache」インデックスから「Search!」を含む記事を検索します。 私が行いたいのは、プルダウンで選択したインデックスの中から、プルダウンで選択した単語を検索すること(例えば、プルダウンで「アパッチ」を選択した時、「apache」インデックスから「アパッチ」という単語を含む記事を検索する)なので、試しに「Search!」を「アパッチ」に書き換えてみたところ、確かに「apache」インデックスから「アパッチ」を含む記事を検索したものの、submitボタンの表示も(当然・・・)「アパッチ」になってしまいました。 つまり、上記のソースにした場合の、 1.submitボタンのvalue値に、プルダウンで任意に選択した<option>タグ外のカタカナ部を自動的に代入する方法 2.submitボタンの表示を「Search!」に固定する方法 が知りたいのです。 上記はJavascript初心者の浅知恵です。そもそもこの二点の両立など不可能なのかもしれないと考え、質問ではこの辺りを省いた次第でした。 説明が悪くてすみません。 引き続き、どうぞよろしくお願いします。