IE5でのonChangeイベントを正しく動作させるには?

[上に] [前に] [次に]
aj 2000/01/31(月) 19:19:12
onChangeイベントでコールしたJavaScriptsの関数で最後にテキストボックスにfocus()とselect()を指定してるのですが次のテキストボックスにフォーカスが移ります。(IE4だとなりませんでした)
submitボタンの時は正しく動作します。
知ってる方がいたら教えて下さい。

sekita 2000/02/01(火) 15:09:32
私も同じようなことをしましたがIE4.0でも5.0でも
正常に動作しました。
ソースかURLがあればわかると思うのですが。

aj 2000/02/03(木) 12:04:08
onChangeのイベントで半角チェックをしてるのですが
IE4だと正常に動きますがIE5だとフォーカスが指定した
様にいきません。
<SCRIPT LANGUAGE="JavaScript">
    function IsAlnum( name ){
        val = name.value
        for (var i=0; i<val.length ; i++ )
        {
            if (val.charAt(i)<" " || val.charAt(i)> "~" )
            {
                <!-- 半角英数字以外はエラー -->
                alert( "半角英数字で入力してください。" );
                name.focus();
                name.select();
                return
            }
        }
        return
    }
</SCRIPT>

<CENTER>
<FORM NAME="UserInput" method="POST" TARGET="Main">
<BR>
<TABLE width="80%" border="0">
  <TR>
    <TD align="right">ユーザID</TD>
    <TD><INPUT name="User" size="12" maxlength="8" value="" + sUser + ""
    onChange=" return IsAlnum(User)" ></TD>
  <TR>
    <TD align="right">取引先コード </TD>
    <TD><INPUT name="Toricd" size="12" maxlength="6" value="" + sToricd + ""
    onChange=" return IsAlnum(Toricd)"></TD>
    <TD></TD>
    <TD></TD></TR>
  <TR>
    <TD align="right">メールアドレス</TD>
    <TD><INPUT name="Mailaddr"  size="22" maxlength="40" value="" + sMailaddr + ""
    onChange=" return IsAlnum(Mailaddr)"></TD>

sekita 2000/02/03(木) 22:53:33
このスクリプトを見るといくつか分からないことがあります。
まず第一にvalue=〜は意味がないのではないでしょうか?
次にonChange=" return IsAlnum(User)" は
    onBlur="IsAlnum(User)"にするべきでしょう
特にこれだけを見た限りではreturnが入っていたのでは
onChangeでも具合が悪いことがあります。
onBlurにするのはonChangeでは1度エラーメッセージが表示されても
OKで答えるともう内容を変えないかぎり漢字がそのまま
送信されてしまいます。
最後にfunctionにあるreturnですが最初のほうはreturn falseにする
必要があります。たぶんスクリプトを試されたときに漢字を入力してから
tabキーで移動かカーソルで他のフィールドをクリックしたのだと思うのですが
return falseにしておかないとその動作がそのまま継続してしまいます。
それで次のフィールドにカーソルが移動しているのではないでしょうか?
2番目のreturnあってもなくても同じでこれも意味不明です。
たぶんHTMLの他のところで私の指摘をカバーしているかあるいは
このように記述しなければならない理由があるのだと思いますが
以上が私が気がついたことです。

aj 2000/02/04(金) 10:20:18
sekitaさんありがとうございます。
このソースはプログラムの1部分を抜き出したものなんですが
Valueはサブミットされた時のDB更新をするために必要です。
onBlurはテキストの項目に変化がなくてもフォーカスを失ったら
チェックにいってしまうので駄目なんです。
変化された時だけチェックしたいのですが。
Returnの部分も色々試したのですがもう一度教えてくださってる通りにやってみます。(ごちゃごちゃになってしまってるので・・・)

aj 2000/02/07(月) 19:01:16
[[解決]]
結局onChangeイベントが怪しいとゆうことで、Hiddenで値をもって
フォーカスを失った時に現在の値と比べてチェックさせる事にしました。

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