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. Спасибо за любые идеи!
Ответы
Ответ 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
}
}