アプリ版:「スタンプのみでお礼する」機能のリリースについて

以下のソースにて?の部分を配列番号と同等にしたいのですが、うまくいきません。
やりたいことは配列の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>

よろしくお願い致します。

A 回答 (5件)

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>
    • good
    • 0

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] || "空";
}
}
    • good
    • 0

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です。
    • good
    • 0

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>
    • good
    • 0

document.myform.Email?.value = "空";



以下のように変えればOKかと思います。

document.myform.elements["Email" + i].value = "空";
    • good
    • 0

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