- ベストアンサー
ループで連続したフォームの値を読み込む
こんにちは ループで苦労しています。 nameが数字で連続したフォームがいくつかあり、それをループで読み取りたいのです。私が作ったものは以下のものです。でもエラーになります。どこが悪いのかどなたかご教授ください。 <script> function ggo(){ for (i=1; i<=3; i++){ document.write(document.forms["myFORM"].elements["k"+i].value); }} </script> <form name="myForm"> <input type="text" name="k0"><br> <input type="text" name="k1"><br> <input type="text" name="k2"><br> <input type="button" value="hai" onClick="ggo()"> </form> それから、余談ですが以下のスクリプトはループを1回にするとkipをエラー無しで読み込んでくれますが、2回以上にするとエラー表示とともに1度しか読み込んでくれませんなぜなのでしょうか?ひとつの書き込みにに1つの質問が原則なのでこちらの質問に答えていただける方がいらっしゃればそれもとてもありがたいです。欲張ってすいません。 <script> function ggo(){ for (i=0; i<=2; i++){ document.write(document.myForm.kip.value); } } </script> <form name="myForm"> <input type="text" name="kip"><br> <input type="button" value="hai" onClick="ggo()"> </form> ↓参照しました↓ http://oshiete1.goo.ne.jp/qa820843.html
- みんなの回答 (2)
- 専門家の回答
質問者が選んだベストアンサー
最初の質問は、No.1の方が書かれているのに補足ですが、 for文のカウンタが1~3までになっているので、 "k" + iは、k1、k2、k3となりコントロール名と異なります。 また、共通で、document.write()にする場合、 ループの1回目で出力処理により、フォームの内容が失われてしまうので、 document.forms[name].elements[name].valueは参照不可になります。 実現したいのであれば、 (1) function ggo(){ var str = ""; for (i=0; i< 3; i++){ str += document.forms["myForm"].elements["k" + i].value + "<BR>"; } document.write(str); } (2) function ggo(){ var val = document.myForm.kip.value + "<BR>"; for (i=0; i<=2; i++){ document.write(val); } } このように変数に格納して表示した方がいいと思います。
その他の回答 (1)
- ANASTASIAK
- ベストアンサー率19% (658/3306)
1.フォームの名前がちがう 2.value値が設定されてない
お礼
ご回答ありがとうございます。 >1.フォームの名前がちがう すいません。一番やっちゃいけない素人間違いですね。 ちなみにループもiを1からスタートさせてます。←アホです。 ご指摘が野球監督のようでありがたいです。
お礼
system0001さん ありがとうございました。 今一生懸命自分の書いたスクリプトとsystem0001さんに書いていただいたスクリプトを見比べましたが「う~ん」という感じです。もちろんsystem0001さんのスクリプトは見事に動きました。マジックのようです。確かに私のスクリプトでは「~はNullまたはオブジェクトではありません」とありましたが、自分のスクリプトの中で変数宣言しなければならない、Valueが設定されていないことすら自分で分かっていませんでした。ループ内では宣言できないということなんでしょうか?なぜ宣言が必要なのでしょうか?残念ながら、もう申し分の無いスクリプトを頂いたのでこの書き込みの後この質問を閉じさせてもらうのでそのお答えはいただけませんが。もう少し「宣言」について自分で考察してみます。ありがとうございました。