2012-09-11

GWT:TextAreaでエンターキーのイベントを検知し処理する

「TextAreaで文字入力を受け付けて、改行と同時にその内容を取り込んでクリアする」というツイッターみたいなプログラムを作成する場合にちょっとハマったので、メモ書きしておきます。

キーイベントの発生順番
TextAreaでのキーイベントの発生順序は下記の通りになりますが、TextAreaにその文字が入力されるタイミングに注意する必要があります。
  1. Down ・・・ 入力前発生
  2. Press ・・・ 入力前発生
  3. Up ・・・ 入力後発生
例えば、改行時にTextAreaの内容をクリアしたい場合、1,2のタイミングでは改行コードはクリア後にTextAreaに入ってしまいます。必ず3のタイミングで処理する必要があります。

キーコードの検知
現在入力されたキーのコードを検知するには、
  • KeyPressEvent
でしか検知できません。

KeyPressとKeyUpを組み合わせる
KeyPressEventでキーの内容を検知し、KeyUpEventでTextAreaの中身を取ってくる(消す)という手順が必要です。例えば以下の様な記述になります。
       @UiHandler("textArea")
        void onEnterKey(KeyPressEvent e) {
                System.out.println("Press");
                if (e.getCharCode() == KeyCodes.KEY_ENTER) {
                        isEnter= true;
                }
       }

        @UiHandler("textArea")
        void onUpKey(KeyUpEvent e) {
                System.out.println("Up");
                if (isEnter) {
                        /*ここでなんらかの処理をする*/
                        isEnter=false;
                }

        }
なお、上記のコードはUiBinder利用時の記述です。

0 件のコメント:

コメントを投稿