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