- ベストアンサー
複数のセレクトメニューを制御するとき・・・
どなたかお手すきでしたら、稚拙な質問にお付き合いお願い致します。 ネットで探した方法で、セレクトメニュー1の項目を選択したときにセレクトメニュー2の項目を変化させる制御をしています。 このフォームでDBにvalue値(1,2など数値で)を送信するようにしたいのですが この方法ですとセレクトメニュー2のvalue値が0(NULL)となってしまい上手く送信できません。 配列に文字列を入れていますし、DBの型をintにしているので0になってしまっていると思うのですが、 文字列としては送信したくはありません。 どのような方法でしたら文字列ではなく、上手くvalueに数値を入れることが出来るでしょうか。 どうかよろしくおねがいします。 以下使用しているコードです。 <html> <head> <title>テストテスト</title> <script language="JavaScript"><!-- menuItem = [ [], ["あああ","あああ2","あああ3","あああ4","あああ5"], ["いいい"], ["ううう","ううう2"], ["えええ","えええ2","えええ3","えええ4"] ]; function clearOption(len){ var i; for (i=0; i<len; i++){ document.aaa.bbb.options[i] = null; } } function setMenuItem(n){ optlen = document.aaa.bbb.options.length; while(optlen > 0){ clearOption(optlen); optlen = document.aaa.bbb.options.length; } if (menuItem[n].length > 0){ for (i=0; i<menuItem[n].length; i++){ document.aaa.bbb.options[i] = new Option(menuItem[n][i],menuItem[n][i]); } } } // --></script> </head> <body> <form name="aaa"> <select name="Maker" onChange="setMenuItem(this.selectedIndex)"> <option value="" selected>--- 選択してください ---</option> <option value="1">ひとつ</option> <option value="2">ふたつ</option> <option value="3">みっつ</option> <option value="4">よっつ</option> </select> <select name="bbb"> <option value="" selected>--- 選択してください ---</option> </select> </form> </body> </html>
- みんなの回答 (2)
- 専門家の回答
質問者が選んだベストアンサー
document.aaa.bbb.options[i] = new Option(menuItem[n][i],menuItem[n][i]); の一行のあとに、 document.aaa.bbb.options[i].value = i; という一行を加えてみてはいかがでしょうか? Optionオブジェクトにはvalueというプロパティがあり、 この値をFORMの送信先に渡すようにできてます。 ↑ですと、番号が0から始まるようになっていますので 1からがよかったら、右辺の i を i + 1 にすればOKです。
その他の回答 (1)
- auty
- ベストアンサー率58% (284/486)
・ new Option(text,value)コンストラクタの2番目の引数がoptionタグのvalueとなるので new Option(menuItem[n][i],i); または new Option(menuItem[n][i],i+1); としてみてください。 ・ DB側では、数値に変換してから利用してください。
お礼
回答ありがとうございます。 >>2番目の引数がoptionタグのvalueとなるので この部分をよく理解しておりませんでした。 とても参考になりました、ありがとうございます!!
お礼
素早い回答感謝いたします。 なるほど・・・optionのvalueプロパティを使用してあげればよいのですね! 仰られた通り試してみたところ、うまくvalue値を渡せているようです。 現在本番環境でないため詳細は試せませんが、この方法でチャレンジしてみたいと思います。 迅速な回答ありがとうございました!