实现字母数字TextBox

时间:2012-01-06 19:20:49

标签: gwt

我正在尝试使用以下代码实现字母数字文本框:

    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 个答案:

答案 0 :(得分:1)

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

这看起来很有效。

答案 1 :(得分:0)

我认为问题在于你的条件。想想这样:如果用户点击Tab,那么它将不是字母或数字,因此它取消了键。只有当它不是任何你想要的密钥时,你才想取消,而不是如果它不是所有密钥(一次)。如果你改为&&而不是它应该工作。

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

如果它不是字母或数字,并且它不是标签,并且它不是退格键,而不是左键,而不是右键,则取消。

答案 2 :(得分:0)

DTing是在正确的轨道上,但是您无法确定在KeyPressEvent中是否获得了正确的键码(取决于浏览器),您应该将它与KeyDown处理程序结合使用。特别是退格和删除等处理方式不同。

来源:http://code.google.com/p/google-web-toolkit/issues/detail?id=4212http://www.quirksmode.org/js/keys.html

相关问题