プロが教えるわが家の防犯対策術!

こんにちは

ループで苦労しています。
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

A 回答 (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);
 }
}

このように変数に格納して表示した方がいいと思います。
    • good
    • 0
この回答へのお礼

system0001さん
ありがとうございました。
今一生懸命自分の書いたスクリプトとsystem0001さんに書いていただいたスクリプトを見比べましたが「う~ん」という感じです。もちろんsystem0001さんのスクリプトは見事に動きました。マジックのようです。確かに私のスクリプトでは「~はNullまたはオブジェクトではありません」とありましたが、自分のスクリプトの中で変数宣言しなければならない、Valueが設定されていないことすら自分で分かっていませんでした。ループ内では宣言できないということなんでしょうか?なぜ宣言が必要なのでしょうか?残念ながら、もう申し分の無いスクリプトを頂いたのでこの書き込みの後この質問を閉じさせてもらうのでそのお答えはいただけませんが。もう少し「宣言」について自分で考察してみます。ありがとうございました。

お礼日時:2007/12/09 00:25

1.フォームの名前がちがう


2.value値が設定されてない
    • good
    • 0
この回答へのお礼

ご回答ありがとうございます。
>1.フォームの名前がちがう
すいません。一番やっちゃいけない素人間違いですね。
ちなみにループもiを1からスタートさせてます。←アホです。
ご指摘が野球監督のようでありがたいです。

お礼日時:2007/12/08 23:32

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!