2

这是我的另一个问题的延续的延续。我正在检查是否按下了有效的字符或数字

有效字符- A 到 Z 和 az,这些字符可以使用“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+ASHIFT+1的值或按下任何其他组合。有什么办法可以吗?

4

1 回答 1

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();
    }
}
于 2013-07-27T15:19:52.417 回答