- ベストアンサー
formのtextフィールドが認識されない
下記のようなフォームに対し、JavaScriptで処理を行おうとしています。 <form name="dateForm" method="post" action=""> <table> <tr><td>0</td> <td><input type='text' name='date[]' maxlength='8' size=12 value='20111001'></td> <td><input type='text' name='date2[]' maxlength='8' size=12 value=''></td></tr> <tr><td>1</td> <td><input type='text' name='date[]' maxlength='8' size=12 value='20111002'></td> <td><input type='text' name='date2[]' maxlength='8' size=12 value=''></td></tr> <tr><td>2</td> <td><input type='text' name='date[]' maxlength='8' size=12 value='20111003'></td> <td><input type='text' name='date2[]' maxlength='8' size=12 value=''></td></tr> </table> <input type='text' name='date_0' maxlength='8' size=12 value='20111000'><br><br> <input type="submit" name="button" value="Check" onClick="send_self();"> <input type="submit" name="button" value="Enter" onClick="set_action();"> </form> Checkボタン押下で上記の関数を呼び出し、テキストフィールドdate[0]の値を表示すると、(1)では「20111001」と正しい値が表示されますが、(2)では下記のエラーが出てしまいます。 「プロパティ '0' の値を取得できません: オブジェクトは Null または未定義です。」 また、 alert(document.dateForm.elements[0]); // … (3) alert(document.dateForm.date); // … (4) とすると、(3)では[object]、(4)では[undefined]と表示されます。 alert(document.dateForm.date_0.value); はvalueも正しく表示されobjectとしても正しく認識されるので、配列へのアクセスに問題があるように思うのですが…。 問題点と解決法をご存知の方がいらっしゃいましたら、どうぞよろしくお願い致します。m(_ _;)m
- みんなの回答 (2)
- 専門家の回答
質問者が選んだベストアンサー
(1)や(2)がどっかにいっちゃってますね alert(document.dateForm.elements["date[]"][0].value); でやってください すなわち同nameのエレメンツがあるときには配列るため添え字が必要で そうでなくnameがユニークならばダイレクトにアクセスできるということです
その他の回答 (1)
- askaaska
- ベストアンサー率35% (1455/4149)
そもそもnameに[]を使っている時点で問題。 <input type='text' name='date[]' maxlength='8' size=12 value='20111001'> へのアクセスは document.dateForm.date ではなく document.dateForm.date[] になるのよ もちろん、これではアクセスできないけど <input type='text' name='date' maxlength='8' size=12 value='20111001'> じゃダメなの? そうすれば document.dateForm.date[0].value document.dateForm.date[1].value document.dateForm.date[2].value こうやってアクセスできるけど
お礼
ご回答ありがとうございます。 実は、PHPで生成したhtmlファイルでして、その為にnameがこのようになっております。言葉足らずですみません。 でも、お陰様で何が問題だったのかがはっきりと分かり、とてもすっきり致しました。どうもありがとうございました。
お礼
編集を繰り返している間に、(1)と(2)を誤って削除してしまったようです。 alert(document.dateForm.elements[0].value); //… (1) alert(document.dateForm.date[0].value); //… (2) でした。ご迷惑おかけしてすみません。 form.elements[]はindexだけでなくnameも引数になるんですね。知りませんでした。 お陰様で、無事解決し動くようになりました。 ありがとうございました! (*^-^*)