web-dev-qa-db-ja.com

keyPressEvent.getCharCode()は、Enter、Tab、Escapeなどのすべての特殊キーに対して0を返します

私のコード:

_@Override
public void onKeyPress(KeyPressEvent event)
{
    if (event.getCharCode() == KeyCodes.KEY_ENTER)
    {
        registerButton.click();
    }
}
_

これはTextBoxにアタッチされており、Enterキーを押すと起動します。 event.getCharCode()は単なる__であり、_13_ではありません。タブを押すと_0_になり、エスケープを押すと_0_になります。ああ!

これは昨日は正常に機能していましたが、プロジェクトのどこかでこれに影響を与えるために何かが変更されました-しかし、それが何であるかはわかりません。最終日に関連する変更が行われていないようです。

代わりにKeyUpEventを処理すると、これは期待どおりに機能します。

GWT 2.1.0を使用しています。任意のアイデアをありがとう!

32
Riley Lark

KeyPressHandlerは、たとえば SHIFT、 CTRL、 ALT キー。

イベントを別のキーにアタッチする場合は、KeyDownHandlerを使用する必要があります。

nameField.addKeyDownHandler(new KeyDownHandler() {

    @Override
    public void onKeyDown(KeyDownEvent event) {
        if (event.getNativeKeyCode() == KeyCodes.KEY_ENTER) {
            Window.alert("hello");
        }

    }

});
38
Michaël

またはこれを試すことができます

if (event.getNativeEvent().getKeyCode() == KeyCodes.KEY_ENTER) {
}
9
Daniel Cerecedo

KeyPresshandlerの代わりにKeyUpHandlerを使用する必要があります。

newSymbolTextBox.addKeyUpHandler(new KeyUpHandler() {
    @Override
    public void onKeyUp(KeyUpEvent event) {
        if (event.getNativeKeyCode() == KeyCodes.KEY_ENTER) {
            addStock();
        }
    }
});
4
user2015482

彼らはFFの行動を変えるかもしれません。私はGWT 2.4.0とFirefox 10を使用しています。これによると comment によると、問題を修正する前に以下のようなものを使用する必要があります。

@Override
public void onKeyPress(KeyPressEvent event) {
    int keyCode = event.getUnicodeCharCode();
    if (keyCode == 0) {
        // Probably Firefox
        keyCode = event.getNativeEvent().getKeyCode();
    }
    if (keyCode == KeyCodes.KEY_ENTER) {
        // Do something when Enter is pressed.
    }
}
2
Vin

2.0.4から2.2.1に更新するときに同じ問題が発生したため、gwtコードに関連しているようです。

問題の一部は、KeyPressedEventがネイティブ(つまりブラウザ固有)のキープレスイベントを表すことです。この問題について提出した バグ では、コメントの1つに次のように書かれています。

ただし、「エスケープ」ではKeyPressEvent(IEおよびWebKitの動作)は生成されないではないと予想されます。それらにはKeyDownまたはKeyUpを使用する必要があります。残念ながら、Firefox(およびOpera)は他よりもはるかに多くのキープレスイベント(IEとWebKit、最も賢明な実装であるW3CがDOM 3イベント、AFAICTで標準化しようとしているもの)を起動しますが、その場合、getCharCode()は0です。無視してかまいません。 1つの例外(他にもあります)は「Enter」キーです。ブラウザーのキー/文字イベントは、GWTが物事を均質化するためにあまり機能しないほど混乱しています(少なくとも現時点では)。

この混乱が解決するまで、最善の策は、KeyDownHandlerまたはKeyUpHandlerで回避策を使用することです。

1
bspoel

GWT 2.5:

public void onKeyPress(KeyPressEvent event) {
    if (event.getNativeEvent().getKeyCode() == KeyCodes.KEY_ENTER) {
        // Event
    }
}
0
Sentence