• ベストアンサー

コンボ1の内容に応じてコンボ2の内容変更

お世話になります。 コンボボックスが2つあり、一つ目に選ばれた内容 に応じて再度データベースと通信し、その内容を二つ目の コンボボックスに反映したいのです。一般的にはどのようにHTMLを記述するのでしょうか? DBアクセスにはperlを使用していますが、HTMLの 範囲での内容を教えていただければ大体わかります。 FORMの構成の仕方、javaの記述の仕方というポイントで 教えていただけないでしょうか? よろしくお願いいたします。

  • HTML
  • 回答数3
  • ありがとう数1

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

  • ベストアンサー
  • LancerVII
  • ベストアンサー率51% (1060/2054)
回答No.3

こんにちは。 一度消えたように見えてしまうのはサーバに投げているのでそうなって しまいます。 しかし、選択内容に応じてDBにアクセスする場合はどうしても一度サーバに リクエストを投げる必要が出てきます。 これを回避するには、全ての情報を最初に読み込んでおき、 JavaScriptでコンボボックスの内容を変更する必要が出てきます。 ( DBにはアクセスできません。input.cgiにアクセスした段階のデータなので 仮にそのまま1時間放って置いて、(その間にDBに更新があったとしても) コンボボックスを選択して次のコンボボックスに表示される内容は1時間前のものです。 ) ここの新規質問登録するときのカテゴリ選択がその方法と思われます。 フレームでわけたりしてゴリゴリにJavaScript使って書けば 出来ないこともないと思いますが、あまりオススメできません。

cshoaucmoa
質問者

お礼

丁寧な回答ありがとうございました。 一応要件は達成したので、これでいいことにしたいと思います

その他の回答 (2)

  • LancerVII
  • ベストアンサー率51% (1060/2054)
回答No.2

こんにちは。 > そうですね(*~_~*)頭ではわかっているつもりが、お恥ずかしいです。 いえいえ、余計なこと書きました。ただ、JavaとJavaScriptって名前とコードの書き方 が似てるだけなので結構同じに捉えている方が多いので。 > そのフォームにはほかにもたくさん入力項目があり、 > そのコンボの上位にも下位にも入力項目が存在します。 > その場合大きくFORMでくくって、そのコンボのところだけ > ネスト(入れ子)してFORMと書きたいところだけど、 > できないんですよね?たしか。そういう事情がある場合の > ことを考えて、FORMでそのコンボを囲まずにできる方法がありますでしょうか? フォームの入れ子は無理ですね。 ただ、わける必要もないかと思われます。 (最終的にはコンボボックスの選択値もサーバ側で必要ですよね?) 例えばですが、下のようなフォームの構成になっているとします。 (先ほどの回答ですとちょっと無理があったので訂正します) 送信先スクリプトをregist.cgi 入力項目のあるページをinput.cgi <form action="./regist.cgi" method="post" name="inputForm"> 入力項目1:<input type="text" name="txt1"> 入力項目2:<input type="text" name="txt2"> 大分類選択:<select name="rcode" onChange="change();"></select> 中分類選択:<select name="scode"></select> 入力項目3:<input type="text" name="txt3"> <input type="submit" value="送信"> </form> == JavaScript <script type="text/javascript"> <!-- function change () { // コンボボックスに変更があった場合は送信先を // 自URLに変更し、サブミットを実行 document.inputForm.action = "./input.cgi"; document.inputForm.submit(); } //--> </script> input.cgiでは、大分類選択の値が送信されてきた場合はその値をキーに 中分類のコンボボックスを生成し、 フォームを出力。また、他のテキスト入力項目等の値も取得し、 inputフィールドのvalueに初期値として埋め込む。 ( こうすることにより、コンボが変更されサブミットがかかってinput.cgiで再表示する際に 既に入力された情報が消えなくて済みます ) 大分類選択の値が送信されてこない場合(初回アクセス時)は 中分類のコンボボックスは生成しない。 最終的に入力が終わり、送信ボタンを選択した際は、regist.cgiにサブミットされるので 値を受け取って処理を行う。 (コンボボックスを変更した場合はJavaScriptによってindex.cgiに飛ぶようにしてある) わかりにくくてすいません。 何かありましたらまた補足して下さい。

cshoaucmoa
質問者

補足

LancerVIIさん、迅速かつご丁寧な対応ありがとうございます。 やってみました。なるほど、全体の情報をもっていって、ページの頭からもう一度cgiで記述する、という方法ですね。やってみましたが、もう一つ贅沢を申し上げてよろしいでしょうか? この状態ではコンボの内容を変えるたびに若干ですが、画面がフラッシュするように感じます。つまり再度頭から書き直すので一度消えたように見えますね。 それをどうにかこのコンボの部分のみで完結できないでしょうか?つまり、見た目上、上位データが保持されているように見えるのではなく、実際上位データを保持し、書き換わるのは対象コンボのみ、ということにはできないでしょうか? 私の認識違いの部分がある場合、またご指摘いただけるとありがたいです。 どうぞよろしくお願いいたします。

  • LancerVII
  • ベストアンサー率51% (1060/2054)
回答No.1

こんにちは。 厳密に言えばHTMLでもなくJavaでもなくJavaScriptのお仕事ですね。 データの持ち方等はわからないのでうまく置き換えてみて下さい。 中分類コードでデータを取得し、該当する情報をコンボ2にします。 <form action="***" method="post" name="selectMenu"> <select name="value1" onChange="change1();"> <option value="001">くだもの</option> <option value="002">やさい</option> <option value="003">さかな</option> <option value="999">その他</option> </select> <select value="value2"> *ここはperl内で取得したデータをもとに生成してください。 </select> </form> == JavaScript function change1 () { document.selectMenu.submit(); } こうすることで、1のコンボボックスを変更したときにサブミットを行い、 サーバ上で値が取得できます。 その値を使用してコンボボックス2に使う情報を取得し、 表示すればいいと思います。 細かいところだと、コンボボックス1の選択状態を変更後に も保持する等するとよいと思います。 (サブミットかけるとそのままでは一番上のものがselect状態になってしまうため)

cshoaucmoa
質問者

補足

早速の返答ありがとうございます。 >>厳密に言えばHTMLでもなくJavaでもなくJavaScriptのお仕事ですね。 そうですね(*~_~*)頭ではわかっているつもりが、お恥ずかしいです。 的確な助言ありがとうございます。 ただ、答えをいただいて気づいたのですが、 そのフォームにはほかにもたくさん入力項目があり、 そのコンボの上位にも下位にも入力項目が存在します。 その場合大きくFORMでくくって、そのコンボのところだけ ネスト(入れ子)してFORMと書きたいところだけど、 できないんですよね?たしか。そういう事情がある場合の ことを考えて、FORMでそのコンボを囲まずにできる方法がありますでしょうか? どうぞよろしくお願いいたします。

関連するQ&A

  • HTMLコンボボックス変更時デザイン変更方法

    HTMLで作成したコンボボックスが二つあります。 HTMLで作成したコンボボックス1の選択を変更した場合、 コンボボックス2に表示させる内容を変更したいのですがどのような処理をおこなえばいいでしょうか? DBなどは使用しておらず、コンボボックスに表示している内容はベタ書きです。 できましたらサンプルプログラムなどを添付またはご教授いただけるようお願いします。

  • コンボボックス二つを連動させる方法

    はじめまして。 Java(struts)とJavaScriptを使用し、プログラムを作成しています。 QNo.1946894に似ているのですが、 データベースを使った場合がよくわからなかったので質問させていただきます。 仕様の内容は、 コンボボックスAには、テーブルAの内容が入っています。 コンボボックスBには、テーブルBの内容が入っています。 たとえば、 Aは野球のチーム、Bは選手のテーブルとします。 Aのコンボボックスで、「阪神」を選んだ場合に、 Bのコンボボックスでは自動的に阪神の選手だけが出るようにしたいのですが、 どのようにしたらよいのかわかりません。 Bのテーブルは、「チーム」というコードは持っています。 よろしくお願いします。 環境: Java1.4.2_09 struts 1.2.7 tomcat 4.1.27

  • Access コンボボックスの内容表示について

    お世話になります。 どうぞ宜しくお願い致します。 Access2000を使用しています。 入力フォームを作り、コンボボックス1で選択した内容に応じて、コンボボックス2で表示する内容を制限させたいと思っています。 ゴーム名 データベース 営業社員の所属するグループ EIGYO_GROUP で選んだグループに応じて 所属する社員 EIGYO_SYAIN で表示する内容を制限させたいのです。 いくつか調べて http://support.microsoft.com/kb/879979/ja http://okwave.jp/qa274932.html を参考にやってみたのですが、 ・マクロの設定方法がよくわからない ・コンボボックスで表示させるデータを選択した後に、[Form]~と入れて抽出させるところがわからない ため、うまくいきません・・・。 また、グループ名は1グループに所属する人数が10名ほどいるので、コンボボックス内の表示がかぶっては困ると、集計して、重複表示させないようにしたんですが、うまくいきませんでした。 すいませんがどなたか方法を教えてください。 宜しくお願い致します。

  • コンボボックの連携について

    コンボボックの連携について Access2003を使用しているAccess初心者です。 フォーム1にコンボボックがあり、顧客テーブルのにリンクされています。 コンボには表示順に オートID 顧客No 顧客名です。 コンボボックを選択すると2番目の顧客名が表示するようになっています。 OKボタンで顧客登録画面を開いているのですが、この時、顧客登録画面の顧客No.もコンボボックスに しているのですが、フォーム1で選択したコンボボックスの値が顧客登録画面のコンボボックに反映しま せん。 どのように記述したら、顧客番号が反映するのでしょうか。 コンボボックスから別のフォームのコンボボックスには値は反映しないもなのでしょうか?

  • HTMLコンボボックスへの項目追加

    今、HTMLのWebを作成しているのですが行き詰ってしまったので、何か方法をご存知の方がおられたら、教えて頂けたらと思います。 下記のようなコンボボックスにvbscriptで項目を追加していきたいのですが、うまくいきません。 --------------------------------- <form name="myform"> <select name="name1"></select> <select name="name2"></select> </form> --------------------------------- 何かよい方法はありますでしょうか? 簡単なサンプルコード等を記述して頂けると助かります。 よろしくお願いします。

  • リロード時もコンボボックスの内容を保持したい

    リロード時もコンボボックスの内容を保持したい select要素を使ったコンボボックスの作成で困っています。 1つ目のセレクトボックスで選んだ都道府県に対応した市を、 2つ目のセレクトボックスに反映させるところまではうまく行くのですが、 ページをリロード、あるいは遷移先から戻ってくると、 1つ目のセレクトボックスを別のものに再選択しないと2つ目が選べない状態になります。 対応方針として、ページロード時に都道府県を選んでいれば、 2つ目のセレクトボックスを再構築するサブルーチンの処理に回すことを考えたのですが(サンプルのコメントアウト部分です。)、 引数に問題があるのか、どうも再構築がうまく行きません。 現状のHTMLを活かしたまま、Javascriptの変更のみで 要望の動きを実現させる方法をご教示いただけないでしょうか。

  • コンボボックス選択によって・・

    質問をご観覧・ご興味を持って頂きありがとう御座います。 現在perlを使ってwebページを勉強しながら作っているものですが、OKWebさんのように まず上下にコンボボックスがあり、上コンボボックスの中のカテゴリーを選択すると、上のカテゴリー内容に乗じて下のコンボボックス内容も変るという仕組みを作りたりたいと思っています。 しかしどのように作るのか皆目検討も付きません。 なにか情報・ご指導・参考などありましたら教えて頂けないでしょうか。 未熟者の私ですがどうぞ宜しくお願いします。

  • コンボボックスを使った入力の改善

    コンボボックスを使った入力を全てのデータベースで利用しています。しかし、各コンボボックスがそれぞれ独立「単体動作」しているので、コンボボックスの初段目「最初」はレコード数が少ないのですが、2段目3段目になると選択候補が累積表示されるので、候補の数も多くなり使いづらさを感じるデータベースも増えました。この状況を改善したいと思っていますので、宜しくお願いします。尚、データベースで設定しているコンボボックス全てに言えることでもありますので、以下のケースを紹介させていただきますので、アドバイスをお願いしたいと思います。 [現状でのやり方] コンボボックス参照オブジェクトは以下の構成にて、コンボボックスは独立していて連動していません。なお、参照データの追加作業は別途作成したフォームを、データ入力フォームに配したコマンドボタンで開いて行っています。 [コンボボックス関連オブジェクト(例)] コンボボックス名:都道府県(値集合ソースで都道府県のみ選択) テーブル名:都道府県テーブル フィールド名:ID、都道府県 フォーム名(参照データ追加):都道府県追加フォーム ※「新規追加後の入力フォームへの即反映はアドバイスにより完結済」 コンボボックス名:市町村(値集合ソースで市町村のみ選択) テーブル名:市町村 フィールド名:ID、市町村 フォーム名(参照データ追加):市町村追加フォーム ※「新規追加後の入力フォームへの即反映はアドバイスにより完結済」 [改善させたいこと] コンボボックス「都道府県」で東京都を選択したとき、次のコンボボックス「市町村」では東京都の市町村だけが次の候補として表示させたいと思っています。又、現在は蓄積データの絞り込み検索で設定していますが、選択コンボボックスの次のコンボボックスを自動プルダウンさせ、候補も同時に表示させ入力できればと考えています。 以上ですが、宜しくお願いします。

  • 【Access】コンボボックスの値の変更方法

    フォームにコンボボックスを配置し、下記の動作をさせたいと思ったのですが、1は出来たものの2が出来ませんでした(値集合ソースの中身は表示されるものの、選択してもコンボボックスに反映されませんでした)。 1. フォームオープン・・・データベースのcmb1の値より、対応する文字をコンボボックスに表示する。 2. コンボボックスの値の変更・・・プルダウンから値集合ソースに表示されている任意の値を選択し、コンボボックスに設定する。 その為、どうすれば値を変更できるようになるかアドバイスいただける方がいらっしゃいましたら、ご教示の程よろしくお願いします。 なお、初期状態から下記を変更しております。 【テーブル】 テーブル名:tbl フィールド名:ID,cmb1 値:1,2 【フォーム】 フォーム名:form1(コンボボックスを一つ配置) フォームのレコードソース:SELECT Choose(tbl.cmb1,"A","B","C") AS nm_cmb FROM tbl WHERE (((tbl.ID)=1)); コンボボックス 列数:2 列幅:0cm;3cm コントロールソース:nm_cmb 値集合タイプ:値リスト 値集合ソース:1;A;2;B;3;C 連結列:2 上記の状態で起動時のコンボボックスの中身は"B"と表示されるものの、コンボボックスのプルダウンメニューを表示して値を変更しようとしても出来ない事が確認できると思います。 以上、よろしくお願いします。

  • VB.NETでコンボボックスの1行目を空白にしたい

    毎度、お世話になっております。 VB.NETでコンボボックスの1行目を空白にしたいです。 (1)[デザイン]のプロパティで設定できますか?  探したのですが、なかなか見つけられず困っています。  コードで記述する方法も分からずながら、試してみましたが、うまくいきません。 (2)もしコードで記述するしかなければ、どのように記述したらよいか教えてください。 ※データは、DBから取得したものを、DataSetに割り当てています。  それをPropertyで宣言したコンボボックスに表示するという形に  しています。 どうぞ、よろしくお願いいたします。