IE4では正常に動くのですがIE3ではエラーになるのは?

[上に] [前に] [次に]
かよ 1999/12/02(木) 11:06:22
同じ名前(indata)の入力項目が6個あり、値を入力して実行ボタンを押しsubmitした時に、空白の項目にはゼロをセットしたいのですが、
以下のコードは、IE4では正常に動くのですが、IE3では"indata[i]はオブジェクトではありません。"というエラーが出てしまいます。

IE3ではオブジェクトの配列のような使い方はできないのでしょうか?
分かる方はご教授ください。
よろしくお願いします。



<FORM NAME="f_main" onSubmit="on_submit(this);" ACTION="XXXX.asp" METHOD="POST">

<INPUT TYPE=text NAME="indata" SIZE="10" MAXLENGTH="3">

//**********************************************************
//* NAME        : on_submit
//* DESCRIPTION : 入力値が空の時、0をセットする
//**********************************************************
function on_submit(p_form) {
for (i=0; i < p_form.indata.length; i++){
if (p_form.indata[i].value=="")                          {p_form.indata[i].value="0"};
}
return(true);
}

P初心者 1999/12/02(木) 11:38:14
>for (i=0; i < p_form.indata.length; i++){

for (i=0; i < 6; i++){
にすると、どうなります?
っていうか、p_form.indata.lengthはコントロールの個数???

きたむら 1999/12/02(木) 15:32:19
うちのWin95+IE3.02でも、かよさんと同じになることを確認しました。
オブジェクトのNAMEを同じにして配列化するのは、IE3ではダメっぽいです。
てことは、p_form.elements[i].nameを全部チェックして、=="indata"になってるのを抜き出すしかない?

かよ 1999/12/03(金) 13:18:47
きたむらさん、わざわざ確認してくださってありがとうごさいます。
早速、p_form.elements[i].nameを使用して、動かしてまたのですか、これもまたIE4では正常に動きますが、IE3では強制終了されてしまうようになりました。

function on_submit(p_form) {
  for (i=0; i < p_form.length; i++){
    if ((p_form.elements[i].name=="indata") && (p_form.elements[i].value=="")){
                 p_form.elements[i].value="0";
    }
  }
  return(true);
}
というわけで、IE4以降でページを使用してもらうように表示することにしました。

きたむら 1999/12/03(金) 17:16:05
いえいえ。こちらのラウンジを読んでると、知らないことがいっぱい出てくるので、自分で確認しては「ひゃーそうだったのか」という毎日です。
今回もかよさんのおかげで「NAMEが同じだと配列になる」ってことを知ったのでした。
(手元のマニュアルが英語なのでなかなか全部目を通せないっす。)

ところで、
>  for (i=0; i < p_form.length; i++){
この部分を p_form.elements.length に直すとIE3でも動くですよ。
(でもこの機会にIE3の人がIE4に移行するならそれもまた善哉)

[上に] [前に] [次に]