Gwt 实现字母数字文本框

Gwt 实现字母数字文本框,gwt,Gwt,我试图用以下代码实现字母数字文本框: textBoxNewPassword.addKeyPressHandler(new KeyPressHandler() { @Override public void onKeyPress(KeyPressEvent event) { char keyCode = event.getCharCode(); TextBox sender = (TextBox) event.

我试图用以下代码实现字母数字文本框:

    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();
        }
    });
它可以工作,但退格和制表符不起作用,这需要删除用户输入的内容并跳转到另一个表单字段


你知道这段代码缺少什么吗

我想问题出在你的身体状况上。这样想:如果用户点击Tab,那么它将不是字母或数字,因此它取消键。只有当它不是您想要的任何键时,您才会取消,而不是(同时)取消所有键时。如果您改为
&&
,它应该可以工作

if (!Character.isLetterOrDigit(keyCode) 
        && !(keyCode == KeyCodes.KEY_TAB)
        && !(keyCode == KeyCodes.KEY_BACKSPACE) 
        && !(keyCode == KeyCodes.KEY_LEFT)
        && !(keyCode == KeyCodes.KEY_RIGHT)
    )
        sender.cancelKey();
如果它不是字母或数字,如果它不是制表符,如果它不是退格,不是左,也不是右,那么取消

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();
    }
  }
});

这看起来是可行的。

DTing是正确的,但您不能确保在KeyPress事件中获得了正确的keycode(取决于浏览器),您应该将其与KeyDown处理程序结合使用。特别是像退格和删除这样的事情处理方式不同


来源:如果您进行调试,您能告诉我是什么部分导致它被取消吗?请尝试分别记录每个条件,并查看返回意外值的内容谢谢,我应该使用getNativeEvent