• ベストアンサー

javascriptが得意な方ご教授ください。for文関連です。

以下のソースにて?の部分を配列番号と同等にしたいのですが、うまくいきません。 やりたいことは配列のEbox_Div[0]~[3]の中にnullが入った場合その配列番号に対応するテキストボックスのEmail0~3には"空"と代入したいのです。 ※hiddenタグのEmail_hの値はTBLの状態によって異なります。 <script language="javascript"> function bunkatsu(){ var Ebox_Div = new Array(); Ebox_Div = document.myform.Email_h.value.split(","); document.myform.Email0.value = Ebox_Div[0]; document.myform.Email1.value = Ebox_Div[1]; document.myform.Email2.value = Ebox_Div[2]; document.myform.Email3.value = Ebox_Div[3]; for (i=0; i<4; i++){ if(Ebox_Div[i] == null){ document.myform.Email?.value = "空"; } } } </script> <body bgcolor="white" onLoad="bunkatsu()"> <form name="myform"> <input type="hidden" name="Email_h" value="aho,baka"> <table border="0" width="100%"> <tr><td width="10%">アドレス1</td><td width="90%"><input type="text" name="Email0" size="60"></td></tr> <tr><td width="10%">アドレス2</td><td width="90%"><input type="text" name="Email1" size="60"></td></tr> <tr><td width="10%">アドレス3</td><td width="90%"><input type="text" name="Email2" size="60"></td></tr> <tr><td width="10%">アドレス4</td><td width="90%"><input type="text" name="Email3" size="60"></td></tr> </table> よろしくお願い致します。

質問者が選んだベストアンサー

  • ベストアンサー
  • Nickee
  • ベストアンサー率15% (14/93)
回答No.3

document.myform.Email?.value = "空"; の部分をオブジェクトとして参照しなければいけないので、 var textName; //適当 と宣言して、 textName = "Email" + i; //文字列でもつ そして、呼び出すときに、document.myform.all(textName).value = "空";とすると、うまくいくと思います。やり方はいろいろありますが。。。。 訂正したソース↓ <script language="javascript"> function bunkatsu(){ var Ebox_Div = new Array(); var textName; Ebox_Div = document.myform.Email_h.value.split(","); document.myform.Email0.value = Ebox_Div[0]; document.myform.Email1.value = Ebox_Div[1]; document.myform.Email2.value = Ebox_Div[2]; document.myform.Email3.value = Ebox_Div[3]; for (i=0; i<4; i++){ if(Ebox_Div[i] == undefined){ textName = "Email" + i; document.myform.all(textName).value = "空"; } } } </script> <body bgcolor="white" onLoad="bunkatsu()"> <form name="myform"> <input type="hidden" name="Email_h" value="aho,baka"> <input type="button" value='test' onclick=bunkatsu();> <table border="0" width="100%"> <tr><td width="10%">アドレス1</td><td width="90%"><input type="text" name="Email0" size="60"></td></tr> <tr><td width="10%">アドレス2</td><td width="90%"><input type="text" name="Email1" size="60"></td></tr> <tr><td width="10%">アドレス3</td><td width="90%"><input type="text" name="Email2" size="60"></td></tr> <tr><td width="10%">アドレス4</td><td width="90%"><input type="text" name="Email3" size="60"></td></tr> </table>

すると、全ての回答が全文表示されます。

その他の回答 (4)

  • 665
  • ベストアンサー率72% (18/25)
回答No.5

Ebox_Divを宣言をする場合splitで返される配列を代入するときにするべきです(この場合new Array()と配列にしておくのは意味がありません)。 function bunkatsu(){ var i, Ebox_Div = document.myform.Email_h.value.split(","); for (i = 0; i < 4; i++) { document.myform.elements["Email" + i].value = Ebox_Div[i] || "空"; } }

すると、全ての回答が全文表示されます。
  • nuruhho44
  • ベストアンサー率57% (38/66)
回答No.4

1.#1の方の方法です。これが最も汎用性が高い方法だと思います。(NN4でも動く) function bunkatsu(){ Ebox_Div = document.myform.Email_h.value.split(","); for (i=0; i<4; i++) { if (Ebox_Div[i]) document.myform.elements["Email"+i].value = Ebox_Div[i]; else document.myform.elements["Email"+i].value = "空"; } } 2.DOMでやってみました。 function bunkatsu(){ Ebox_Div = document.myform.Email_h.value.split(","); for (i=0; i<4; i++) { if (Ebox_Div[i]) document.getElementsByName("Email"+i)[0].value = Ebox_Div[i]; else document.getElementsByName("Email"+i)[0].value = "空"; } } 蛇足:splitによってできる配列は、宣言しなくてもOKです。

すると、全ての回答が全文表示されます。
  • jch
  • ベストアンサー率38% (7/18)
回答No.2

jsの部分だけです。 <script language="javascript"> <!-- function bunkatsu(){ var Ebox_Div = new Array(4); Ebox_Div = document.myform.Email_h.value.split(","); var intkey = Ebox_Div.length; for(i = 3; i >= intkey;i--){ Ebox_Div[i]='空'; } document.myform.Email0.value = Ebox_Div[0]; document.myform.Email1.value = Ebox_Div[1]; document.myform.Email2.value = Ebox_Div[2]; document.myform.Email3.value = Ebox_Div[3]; } --> </script>

すると、全ての回答が全文表示されます。
  • osumitan
  • ベストアンサー率33% (102/307)
回答No.1

document.myform.Email?.value = "空"; 以下のように変えればOKかと思います。 document.myform.elements["Email" + i].value = "空";

すると、全ての回答が全文表示されます。

専門家に質問してみよう