Подтвердить что ты не робот

KeyPressEvent.getCharCode() возвращает 0 для всех специальных клавиш, таких как enter, tab, escape и т.д.

Мой код:

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

Это прикреплено к TextBox, и оно срабатывает, когда я нажимаю enter. event.getCharCode() равен нулю, а не 13. Когда я нажимаю вкладку, она 0, и когда я нажимаю escape, это 0. Argh!

Это работало правильно вчера, и что-то изменилось где-то еще в проекте, чтобы повлиять на это, но я не уверен, что это может быть. Кажется, что в последний день никаких важных изменений не было сделано.

Если вместо этого я обрабатываю KeyUpEvent, это работает как ожидалось.

Я использую GWT 2.1.0. Спасибо за любые идеи!

4b9b3361

Ответ 1

KeyPressHandler используется, например, для клавиш SHIFT, CTRL, ALT.

Если вы хотите присоединить событие к другому ключу, вы должны использовать KeyDownHandler.

nameField.addKeyDownHandler(new KeyDownHandler() {

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

    }

});

Ответ 2

или вы можете попробовать это

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

Ответ 3

Вместо KeyPresshandler следует использовать KeyUpHandler.

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

Ответ 4

Они могут изменить поведение на FF. Я использую GWT 2.4.0 и Firefox 10. В соответствии с этим комментарий, вы должны использовать что-то вроде ниже, прежде чем устранить проблему:

@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.
    }
}

Ответ 5

У меня такая же проблема при обновлении с 2.0.4 до 2.2.1, поэтому она, похоже, связана с кодом gwt.

Отчасти проблема заключается в том, что KeyPressedEvent представляет собой родное (т.е. определенное для браузера) событие нажатия клавиши. В ошибке, которую вы подали по этой проблеме, в одном из комментариев говорится:

Однако ожидается, что "escape" не генерирует KeyPressEvent (поведение IE и WebKit); вы должны использовать KeyDown или KeyUp для них. Firefox (и Opera), к сожалению, запускает еще много событий нажатия клавиш, чем другие (IE и WebKit, которые имеют самую разумную реализацию, тот, который W3C собирается стандартизировать в DOM 3 Events, AFAICT), но в этом случае getCharCode() равен 0 поэтому вы можете смело игнорировать их. Единственное исключение (может быть и другие) - это ключ "enter". Ключ /char события в браузерах - такой беспорядок, что GWT не делает многого для гомогенизации вещей (по крайней мере пока).

Пока этот беспорядок не будет отсортирован, лучше всего использовать обходной путь с KeyDownHandler или KeyUpHandler.

Ответ 6

GWT 2.5:

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