Реализация буквенно-цифрового TextBox - PullRequest
0 голосов
/ 06 января 2012

Я пытаюсь реализовать буквенно-цифровое текстовое поле с помощью этого кода:

    textBoxNewPassword.addKeyPressHandler(new KeyPressHandler() {
        @Override
        public void onKeyPress(KeyPressEvent event) {
            char keyCode = event.getCharCode();
            TextBox sender = (TextBox) event.getSource();

            if (!Character.isLetterOrDigit(keyCode) 
                    || !(keyCode == KeyCodes.KEY_TAB)
                    || !(keyCode == KeyCodes.KEY_BACKSPACE) 
                    || !(keyCode == KeyCodes.KEY_LEFT)
                    || !(keyCode == KeyCodes.KEY_RIGHT)
                )
                sender.cancelKey();
        }
    });

Однако оно работает, Backspace и Tab не работают, что необходимо для удаления чего-либо, что имеет пользовательский тип, и перехода кдругие поля формы.

Есть идеи, чего не хватает в этом коде?

Ответы [ 3 ]

1 голос
/ 07 января 2012
tb.addKeyPressHandler(new KeyPressHandler() {
  @Override
  public void onKeyPress(KeyPressEvent event) {
    TextBox sender = (TextBox) event.getSource();

    int keyCode = event.getNativeEvent().getKeyCode();

    if (!(Character.isLetterOrDigit(event.getCharCode()))
        && !(keyCode == KeyCodes.KEY_TAB)
        && !(keyCode == KeyCodes.KEY_BACKSPACE)
        && !(keyCode == KeyCodes.KEY_LEFT)
        && !(keyCode == KeyCodes.KEY_RIGHT)) {
      sender.cancelKey();
    }
  }
});

Похоже, это работает.

0 голосов
/ 17 августа 2012

DTing находится на правильном пути, но вы не можете быть уверены, что получили правильный код ключа (зависит от браузера) в KeyPressEvent, вы должны использовать его в сочетании с обработчиком KeyDown.Особенно такие вещи, как backspace и delete обрабатываются по-разному.

Источник: http://code.google.com/p/google-web-toolkit/issues/detail?id=4212 и http://www.quirksmode.org/js/keys.html

0 голосов
/ 06 января 2012

Я думаю, что проблема в ваших условиях. Подумайте об этом так: если пользователь нажимает клавишу Tab, то это не будет буква или цифра, поэтому он отменяет клавишу. Вы хотите отменить, только если это не любой из тех ключей, которые вам нужны, а не если это не все из ключей (сразу). Если вы измените значение на &&, оно должно работать.

if (!Character.isLetterOrDigit(keyCode) 
        && !(keyCode == KeyCodes.KEY_TAB)
        && !(keyCode == KeyCodes.KEY_BACKSPACE) 
        && !(keyCode == KeyCodes.KEY_LEFT)
        && !(keyCode == KeyCodes.KEY_RIGHT)
    )
        sender.cancelKey();

Если это не буква или цифра, и если это не вкладка, и если это не пробел, а не слева и не вправо, то отмените.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...