2016-03-22 3 views
0

と呼ばれ、次のように私はButtonオブジェクトにKeyUpHandlerを追加しました:私はステップによってSuperDevモードステップでデバッグするときは、GWTのKeyUpHandlerは、複数回の代わりに、1

button.addKeyUpHandler(new KeyUpHandler() { 

     @Override 
     public void onKeyUp(final KeyUpEvent event1) { 
      if (event.isDownArrow()) { 
        counter++; 
      } 
     } 
    }); 

はしかし、の2つの呼び出しがありますonKeyUp最初の呼び出しは常にcounterの初期値(この場合は0)を持ち、2番目の呼び出しは最新の-maintained-値のcounterです。 onKeyUpのロジックを追加した方法も​​とマークされています。私はremoveHandler()メソッドHandlerRegistrationの直後にonKeyUpと呼ぶことを試みた。その結果、最初のキーアップイベント後に2回のコールが発生しましたが、別のキーアップイベントが発生したときにもう1回コールが発生し、さらにキーアップイベントエリアは発生しませんでした。私はこれがスーパーデーヴモードに関連したsthであるか、コンパイル後に内部オーバーヘッドがあると想定しています。 GWTでイベントハンドラを追加する正しい方法は何ですか? removeHandler() HandlerRegistrationメソッドを呼び出すことによって、常に各ハンドラを処理する必要がありますか?

+0

ハンドラを複数回追加しますか? – Baz

+0

はい、ハンドラが異なります(MouseUpHandlerとKeyUpHandler)。しかし、ボタンオブジェクトの作成時にMouseUpHandlerが追加されている間、RunUnableを介してKeyUpHandlerを追加します。 ClickHandlerはキーボードイベントとマウスイベントの両方に呼び出されていることもわかりました。 – baris

+1

あなたが作成するハンドラは、どのループでも呼び出していますか? –

答えて

0

日時:クリックのための複数の呼び出しについてコメント/のmouseup/keyUpイベント

ブラウザは、任意のイベントを効果的にクリックしますいつでも、それを焼成してクリックハンドラのための「助け」、いずれかのマウスダウン、その後、何の動きをMouseUpイベントませんが、かさまざまなタッチまたはキーボードイベント。すでに処理したイベントでpreventDefault()を呼び出すことを検討してください。ブラウザをさらに見せたくない場合 - マウスアップやキーアップでこれを呼び出すと、クリックイベントが発生しないようにしてください。

+0

いや、私は今それを試みたが、変更しなかった。更新された質問を参照してください。 – baris

関連する問題