• 締切済み

IE7のonChangeイベントを使用して入力チェック

textフィールドのonchangeイベントでjavascriptの入力チェックを行い、エラー時はフォーカスをエラー項目に戻し、カーソルを移動できないようにしたいです。 --想定している動作 (1)test1_fieldに1以外の値を入力し、tabなどで移動する。 (2)javascriptのcheck1()でエラーチェック。エラー「test1_field NG」が表示され、カーソルがtest1_fieldに戻る。 再度、カーソルを移動しようとすると、(2)の動作を行う。 --実際の動作 IE6(XP+IE6sp2)では、以下のテストスクリプトで想定している動作をしていたのですが、IE7(Vista+IE7)では、return falseを返しても、test2_fieldにフォーカスが移動できてしまいます。 --テストコード <html> <script> function check1(obj){ if (obj.value==1){ return true; } alert("test1_field NG"); obj.focus(); obj.select(); return false; } function check2(obj){ if (obj.value==2){ return true; } alert("test2_field NG"); obj.focus(); obj.select(); return false; } </script> test1_field:<input type="text" name="test1_field" onchange="return check1(this)" >(1のみOK)<br><br> test2_field:<input type="text" name="test2_field" onchange="return check2(this)" >(2のみOK) </html> 記述等に間違いがあるのでしょうか? ご教授いたがければ幸いです。

みんなの回答

回答No.2

javascriptのイベントの仕様では、 >change >The change event occurs when a control loses the input focus and its value has been modified since gaining focus. This event is valid for INPUT, SELECT, and TEXTAREA. element. >* Bubbles: Yes >* Cancelable: No >* Context Info: None とありまして、「Cancelable: No」なので、onchangeのキャンセルはできないのが本来の挙動ではないでしょうか。 IE6/IE7で動作確認した限りでは、IE6ではonchangeのキャンセルができていたのが、IE7で仕様通りの挙動に変更された様に見えます。

参考URL:
http://www.w3.org/TR/DOM-Level-2-Events/events.html
JRPN
質問者

お礼

回答ありがとうございます。 IE6でキャンセル可能だった為、IE7も基本的にキャンセルの動作が引き継がれると思っていましたが、諦めました。 素直にonchangeからonblurに置き換え作業を実施したいと思います。 ありがとうございました。

  • auty
  • ベストアンサー率58% (284/486)
回答No.1

・ vista IE7でうまく行くのを確認しました。バージョンは、 IE7: 7.0.6000.16609

JRPN
質問者

お礼

回答ありがとうございます。 auty様から回答いただき、私の方で3つのIE7環境でテストを実施してみました。 Vista+IE7(7.0.6001.18000) -->NG Vista+IE7(7.0.6000.16643) -->NG Xp+IE7(7.0.5730.13) -->NG Xp+IE6(6.0.2900.2180) -->OK という状況です。 引き続き何か情報をお持ちでしたらよろしくお願いいたします。

関連するQ&A