- ベストアンサー
FORMデータを配列としてそうしんしたいのですが・・・
JavaScriptでセレクトボックス内の値が変化したらもう一つあるセレクトリスト内の値が変更されるように組みました。 以下コード。 ----------------------- <HTML> <head> <script type="text/JavaScript"> <!-- menuItem = [["A","B","C","D","E"], ["1","2","3"], ["あ","い","う","え","お","か"]]; function setMenuItem(n) { len = document.myForm.works.options.length; for (i=len-1; i>=0; i--) { document.myForm.works.options[i] = null; } for(i=0; i<menuItem[n].length; i++) { document.myForm.works.options[i] = new Option(menuItem[n][i],menuItem[n][i]); } } } //--> </script> </head> <body> <FORM name = "myForm"> <SELECT name="list" onChange="setMenuItem(this.selectedIndex)"> <option value="list1">リスト1 <option value="list2">リスト2 <option value="list3">リスト3 </SELECT> <SELECT name="works[]" MULTIPLE> <OPTION>A <OPTION>B <OPTION>C <OPTION>D <OPTION>E </SELECT> </FORM> </BODY> </HTML> ----------------------- でセレクトリスト内のデータを配列として送信したいのですがうまくいきません。 セレクトリストのnameはworks[]にしたら動作すらしなくなりました。 どなたかご教授願います。
- みんなの回答 (3)
- 専門家の回答
質問者が選んだベストアンサー
とりあえず ×document.myForm.elements.works ○document.myForm.elements["works[]"] #1さんの指摘のうち、配列に関する部分に関しては 的を得ていないようです。 受け取った側で処理が楽になるように配列っぽい名前に するのはこの場合は有効です。
その他の回答 (2)
- Dr_Pepper
- ベストアンサー率66% (2/3)
#2さんにご指摘を受けたので追記しておきます。 HTML4.0では、name属性に[]の使用は認められていません。 認められている文字は、アルファベット、数字、ハイフン(-)、ピリオド(.)、コロン(:)、アンダースコア(_)のみです。 動作するのは、IEが拡大解釈してくれているからです。 他のブラウザで動くという保証はありませんし、今後のバージョンのIEで動くという保証もありません。 ですので、この場合は、 work[]→work としたほうが良いでしょう。
- Dr_Pepper
- ベストアンサー率66% (2/3)
HTMLのname属性は、そのタグで囲まれた部分に名前をつけるためのものですので、配列を意味する名前はつけることができません。 ※work[]→work また、括弧の数が一つ多いです。 {}の中はインデントするなどして、見やすくすると、括弧の数の間違えは少なくなりますよ。
お礼
ありがとうございます! 括弧に関してはこちらの編集ミスでした・・・・ >>HTMLのname属性は、そのタグで囲まれた部分に名前をつけるためのものですので、配列を意味する名前はつけることができません。 ※work[]→work なるほど・・・さまざまな参考書をみてみると セレクトリストのデータを配列として送信する場合[]をつけていたのでそのまま鵜呑みにしていましたので・・・
お礼
回答ありがとうございます! 構文が異なっているとのことですか。 一応やりたいこととしてはセレクトボックスである値を選択したらそれに応じてセレクトリストのデータ表示され、それを配列として送信するということを行おうとしてました・・・・