2013-07-27 1 views
2

이것은 다른 question과 계속됩니다. Z와 AZ에 A, 이러한 문자는 "SHIFT + A = A"와 반대의 경우도 마찬가지 "SHIFT + A = A를 사용하여 입력 할 수 있습니다 - 유효한 문자 또는 숫자가"shift + anykey"의 NativeEvent.getKeyCode 캡처 방법

유효한 문자을 누르고있는 경우 어떻게 확인하고 ". 유효한 문자 이외의 문자를 입력하도록 사용자를 제한합니다.

잘못된 문자 - "SHIFT + 1 =!" 내가의 키 코드를 얻을하는 방법을 잘 시도했지만 "SHIFT + 0 =)"

을 Heres 코드 스 니펫 (snippet), "SHIFT + ...."

@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 코드 = event.getKeyCode에();

코드의 값은 항상 16 validShiftKeyPressed는 항상 false가 될 것입니다 될 것입니다.

SHIFT + A 또는SHIFT + 1 또는 임의의 다른 조합을 누를 때의 값을 확인하고 싶다. 이것이 가능한 방법이 있습니까?

답변

1

정확한 질문에 대한 답변이 아니지만 원하는 경로를 알려주지 못했습니다. 내가 틀렸다면이 대답을 무시하십시오.

숫자가 아닌 사용자 입력을 방지하기 위해 아래 코드의 변형을 사용하지만 사용자가 필드를 이동하고 편집 할 수 있도록 허용합니다. 이 스 니펫에 "Character.isLetter (c)"를 추가하여 문자를 허용합니다 (위 또는 아래). GWT 에뮬레이션 클래스는 ASCII 문자 만 처리한다고 설명합니다. gwt-user.jar의 "/ gwt-user/com/google/gwt/emul/java/lang/Character"에서 에뮬레이트 된 클래스를 찾아 자바 스크립트에서 수행중인 작업을 살펴볼 수 있습니다.

이 유형의 코드는 사용자에게 완전한 입력 제한 조건 및 유효성 검사 솔루션을 포함하지 않습니다. 예를 들어, 사용자가 필드에 원하는 내용을 붙여 넣을 수는 없습니다. 일반적으로 저장하기 전에 페이지의 전체 유효성 검사를 수행하여 필드의 최종 입력이 유효한지 확인합니다. GWT 유효성 검사 기능 (bean validation)을 사용합니다. 이것은 내가 이와 같은 코드로부터 예방할 수없는 입력 중단을 잡는다.

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(); 
    } 
} 
관련 문제