这是我的其他question的继续。我正在检查是否按下了有效的字符或数字
有效字符 - A到Z和a-z,可以使用“SHIFT + A = a”输入这些字符,反之亦然“SHIFT + a = A”。我限制用户输入有效字符以外的其他字符
无效字符 - “SHIFT + 1 =!” “SHIFT + 0 =)”
下面是一段代码片段,我试过但不知道如何获得“SHIFT + ....”的keyCode
@Override
public void onBrowserEvent(Context context, Element parent, String value,
NativeEvent event, ValueUpdater<String> vUpdater){
if (event.getShiftKey()) {
int code = event.getKeyCode();
//only a-z and A-Z are allowed if shift key is pressed
if ((code >= 65 && code <= 90) || (code >= 97 && code <= 122)) {
validShiftKeyPressed = true;
} else {
validShiftKeyPressed = false;
}
}
if (validShiftKeyPressed &&
(event.getKeyCode()>=48 && event.getKeyCode()<=57)){
\\do some operation
}
int code = event.getKeyCode();
代码的值始终为16, validShiftKeyPressed 将始终为false。
我想检查 SHIFT + A 或 SHIFT + 1 的值或按下任何其他组合。这有可能吗?
答案 0 :(得分:1)
这不完全是您确切问题的答案,但我不确定您所处的路径是否能满足您的需求。如果我错了,那就干掉这个答案。
我使用以下代码的变体来防止非数字用户输入,但仍然允许用户四处移动并编辑该字段。我将“Character.isLetter(c)”添加到此代码段以允许字母(上部或下部)。 GWT仿真类声明它只处理ASCII字符。您可以在gwt-user.jar中的“/ gwt-user / com / google / gwt / emul / java / lang / Character”中找到模拟类,以查看它在javascript-land中的作用。
请注意,隔离的此类代码不包含用户的完整输入约束和验证解决方案。例如,它不会阻止用户将任何他们想要的内容粘贴到字段中。我通常会在保存之前尝试对页面进行完整验证,以确保我的字段的最终输入有效。我使用GWT验证功能(bean验证)来执行此操作。这可以捕获我无法阻止的任何输入中断。
protected void handleKeyPress(KeyPressEvent event) {
// get the char code
char charCode = event.getCharCode();
if (charCode == '\u0000') {
/*
* On some browsers the charcode does not exist in the keypress
* event. In this case we switch over to the keycode.
*/
charCode = (char)event.getNativeEvent().getKeyCode();
}
// prevent input other than [a-z|A-Z|0-9] but still allow basic navigation and editing keys
if ((!Character.isDigit(charCode)) && (!Character.isLetter(charCode)) &&
(charCode != (char)KeyCodes.KEY_TAB) &&
(charCode != (char)KeyCodes.KEY_BACKSPACE) &&
(charCode != (char)KeyCodes.KEY_ENTER) &&
(charCode != (char)KeyCodes.KEY_HOME) &&
(charCode != (char)KeyCodes.KEY_END) &&
(charCode != (char)KeyCodes.KEY_LEFT) &&
(charCode != (char)KeyCodes.KEY_UP) &&
(charCode != (char)KeyCodes.KEY_RIGHT) &&
(charCode != (char)KeyCodes.KEY_DOWN)) {
event.preventDefault();
}
}