- ベストアンサー
セレクトメニューをチェックボックスに変更
HTML部分のみ変更可能なCGIの一部で セレクトメニューをチェックボックスに変更出来ますか? しても問題ないですか? 教えて下さい <(_ _)> <select name="ken"> <option value="5"/?ken.5?/>5件</option> <option value="10"/?ken.10?/>10件</option> <option value="20"/?ken.20?/>20件</option> </select>
- みんなの回答 (6)
- 専門家の回答
質問者が選んだベストアンサー
チェックボックスでも代用はできますが、フォームの名称を同じにした場合、CGI側でPOSTされたデータを受信するプログラムをしっかり作り込まないとANo.1さんのおっしゃるように上書きされて最後に代入された値のみが残ってしまうことになります。 逆を言えば受信側のCGIでしっかり作り込んでいれば問題はありません。 質問の例で全部にチェックが入った場合GETメソッド調に記述すると ?ken=5&ken=10&ken=20 のように入ってきますのでこれをどう処理するかはCGI作者の仕様次第となります。 ちなみにわたくしは、巷でよく行われるハッシュ代入の際に、同一のキーを持つものが有ればタブで区切ってデータ追記するようにしています。
その他の回答 (5)
- ralf124c
- ベストアンサー率52% (232/446)
またまたまた失礼します。 前の回答で「なら」を2回繰り返しているミスに赤面しております。 フォームを強制的に設定したい場合の簡単なJavaScriptサンプルを以下に置いときます。 <html> <head> <title>TEST</title> </head> <script language="JavaScript"> <!-- function fInit(){ // それぞれ2番目の要素を強制選択 document.f.S01[1].selected = true; document.f.R01[1].checked = true; } //--> </script> <body onLoad="fInit()"> <form method="POST" action="test01.cgi" name="f"> <select size="1" name="S01"> <option value="AAAAA">AAAAA</option> <option value="BBBBB">BBBBB</option> <option value="CCCCC">CCCCC</option> <option value="DDDDD">DDDDD</option> </select><br> <input type="radio" value="AAA" name="R01">A <input type="radio" name="R01" value="BBB">B <input type="radio" name="R01" value="CCC">C <input type="radio" name="R01" value="DDD">D <br> <input type="submit" value="送信" name="B1"> </form> </body> </html>
お礼
色々と詳しい説明、ありがとうございました。
- ralf124c
- ベストアンサー率52% (232/446)
またまた失礼します。 元のフォームの表示がベタHTMLなのかCGIやPHPによるものなのか、またブラウザによって状況は変わってきますが 通常、HTML側にSELECTEDがあろうがCHECKEDがあろうが「次画面から戻るボタンによってフォームに戻って」くれば、入力時の値になると思います。 そうならないケースとして自分の知る範囲で以下のケースがあげられます(環境はいずれもWindows)。 1.フォームHTML内でロード時にJavaScript等によってフォームの値が初期化される。 2.ブラウザがIEならキャッシュファイルが壊れている。(キャッシュファイルを消せば正しくなる) 3.FireFoxならおかしくなっているフォームの前に<span>タグなどでスタイルシートのクラスが指定されている。 4.フォーム自体がサーバサイドのプログラムによって生成される。 といったところでしょうか 経験上、一番多いケースは「2」のIEのバグに起因するものです。 普通のエンドユーザならなら、大多数が確認などから戻ったときに再入力が面倒と感じるので、ブラウザ側では入力時の値をキープする仕様になっていると思います。 的外れな回答かもしれませんが…こんな回答で大丈夫でしょうか。
お礼
戻るとラジオボタンだけがキープされないです FireFox NO6をやってみます。
- ORUKA1951
- ベストアンサー率45% (5062/11036)
確認画面にしろ、エラー表示にしろ原理は同じ。 たとえば、この「おしえて」でも、確認画面のソースには、記入内容とは別に、「戻る」のフォームには、すべての記入内容がhiddenで書かれているのでは?(未確認) それを元に、記入フォーム自体もCGIから出力させればよいです。 ソースの中途にHTMLのソース書くのは面倒ですし、改造もしにくくなるので、状況により、 __END__ 以降にソースを書いて<DATA> あるいは、外部ソース を呼び出して----Q1----、とか、---ckedc1---の部分を、送られてきたデータを使って書き直してます。
お礼
ちょっと難しそうですけど参考にさせていただきます
- ralf124c
- ベストアンサー率52% (232/446)
たびたび失礼いたします。 takumana20様のスキルがわからないのでお礼のところで問われている部分についてはなんとも申し上げられないのですが 端的に言うと 一項目しか選択できないセレクトメニュー = ラジオボタン 複数項目選択できるセレクトメニュー(multiple) = チェックボックス となります。 CGIのカテなので「CGI側をどうにかしたい」のかと思ったのでそのつもりで回答したのですが、HTMLに関する質問だったのでしょうか?
お礼
質問がわかりにくくてすいません。。。えーと、 オプションをラジオに変更してみたら戻った時とか 戻り値がセレクトオプションなら固定でselectedになってたんですが (CGIで何か細工をしてるのかな? 決定した値が反映されてるんです) ラジオだと固定値checkedになんないんですよね。これが毎回チェックしなおすのも面倒だし (そのスキルが無いんですw)困った・・・
- ORUKA1951
- ベストアンサー率45% (5062/11036)
/?ken.5?/・・・ってなに? radioボタンでは代用可能です。 checkだとnameを変えないと上書きされます。
お礼
すいません<(_ _)> radioボタンで作って1個だけ選択したいので大丈夫って事ですね。
補足
> /?ken.5?/・・・ってなに? たぶんCGIの何かの指定です。たぶんこれが戻った時に決定した項目がselectedになると思います。 でもラジオボタンだと戻った時にチェックにcheckedにならないんです・・・ ラジオボタンにして、戻った時にも一度決定した項目がチェックされる方法があれば教えて下さい。
お礼
えーと チェックボタンの場合は私には難しいですね・・・ radioボタンなら問題ないって事ですね?