텍스트 상자에 숫자 만 허용해야하는 경우가 있습니다. 사용자가 숫자 이외의 문자를 입력하려고하면 이벤트를 취소해야합니다. 어떻게이 일을 도와 주시겠습니까?GWT의 텍스트 상자에 숫자 만 허용 하시겠습니까?
감사합니다.
텍스트 상자에 숫자 만 허용해야하는 경우가 있습니다. 사용자가 숫자 이외의 문자를 입력하려고하면 이벤트를 취소해야합니다. 어떻게이 일을 도와 주시겠습니까?GWT의 텍스트 상자에 숫자 만 허용 하시겠습니까?
감사합니다.
특정 이벤트에 대한 사용자 입력의 유효성을 검사하면됩니다. 예를 들어, 모든 키 입력 (KeyPressEvent), TextBox가 포커스를 잃을 때 (ValueChangeEvent), 버튼 누름시 (ClickEvent) 등이 있습니다. 이벤트 핸들러를 구현합니다 (예 : KeyPressHandler를 만들고 TextBox를 사용하여 구현을 등록하십시오. 그런 다음 처리기에서 TextBox 값의 유효성을 검사하고 숫자 이외의 다른 값이 포함되어 있으면 값이 유효하지 않다는 것을 사용자에게 알리는 아마도 메서드에서 반환됩니다. 이 같은
뭔가 : 당신이 할 수있는 검증의 많은 경우
final TextBox textBox = new TextBox();
textBox.addKeyPressHandler(new KeyPressHandler() {
@Override
public void onKeyPress(KeyPressEvent event) {
String input = textBox.getText();
if (!input.matches("[0-9]*")) {
// show some error
return;
}
// do your thang
}
});
, 당신은 아마 바퀴를 재발의 많은에서 당신을 절약 할 몇 가지 검증 프레임 워크를 소개합니다. 요즘 더 나은 대안이 있을지 모르지만 개인적으로 나는 GWT-VL validation framwork에 상당히 만족하고 있습니다.
다음은 좀 더 일반적인 접근법이며 코드 재사용을 허용합니다. 원하는 모든 텍스트 상자에 대해 NumbersOnly 핸들러를 사용할 수 있습니다.
intbox1.addKeyPressHandler(new NumbersOnly());
intbox2.addFocusHandler(new OnFocus());
//inner class
class NumbersOnly implements KeyPressHandler {
@Override
public void onKeyPress(KeyPressEvent event) {
if(!Character.isDigit(event.getCharCode()))
((IntegerBox)event.getSource()).cancelKey();
}
}
백 스페이스와 탭 키를 처리하는 방법은 무엇입니까? – knocker
@knocker - 이렇게하면 백 스페이스, 탭, 복사/붙여 넣기, 집/끝, 모두 선택 및 제대로 작동하지 않도록 할 수 있습니다. cancelKey는 behindDefault를 호출합니다. 이 솔루션은 부분적으로 작동하지만 매우 제한적입니다. – sixtyfootersdude
class NumbersOnly implements KeyPressHandler {
@Override
public void onKeyPress(KeyPressEvent event) {
if (!Character.isDigit(event.getCharCode())
&& event.getNativeEvent().getKeyCode() != KeyCodes.KEY_TAB
&& event.getNativeEvent().getKeyCode() != KeyCodes.KEY_BACKSPACE){
((IntegerBox) event.getSource()).cancelKey();
}
}
}
GWT 2.5에서 Firefox 및 Safari에서이 코드를 사용하여 다른 사람을 테스트하지 않은 백스 페이스 키가 작동하지 않습니다. 복사/붙여 넣기, 화살표 키, 집/끝 또는 모두 선택에서는 작동하지 않습니다. – sixtyfootersdude
나는 예를 들어 다른 예외에게 번호를 복사 할 수있는 가능성을 추가했습니다. 여전히 클립 보드에서 물건을 붙여 넣을 수 없습니다.
public class NumbersOnlyKeyPressHandler implements KeyPressHandler {
@Override
public void onKeyPress(KeyPressEvent event) {
switch(event.getNativeEvent().getKeyCode()) {
case KeyCodes.KEY_TAB:
case KeyCodes.KEY_BACKSPACE:
case KeyCodes.KEY_DELETE:
case KeyCodes.KEY_LEFT:
case KeyCodes.KEY_RIGHT:
case KeyCodes.KEY_UP:
case KeyCodes.KEY_DOWN:
case KeyCodes.KEY_END:
case KeyCodes.KEY_ENTER:
case KeyCodes.KEY_ESCAPE:
case KeyCodes.KEY_PAGEDOWN:
case KeyCodes.KEY_PAGEUP:
case KeyCodes.KEY_HOME:
case KeyCodes.KEY_SHIFT:
case KeyCodes.KEY_ALT:
case KeyCodes.KEY_CTRL:break;
default:
if(event.isAltKeyDown() || (event.isControlKeyDown() && (event.getCharCode() != 'v'&& event.getCharCode() != 'V')) )
break;
if(!Character.isDigit(event.getCharCode()))
if(event.getSource() instanceof IntegerBox)
((IntegerBox)event.getSource()).cancelKey();
}
}
}
이 하나를 시도
public void onKeyPress(KeyPressEvent event) {
if(event.getNativeEvent().getKeyCode()!=KeyCodes.KEY_DELETE &&
event.getNativeEvent().getKeyCode()!=KeyCodes.KEY_BACKSPACE &&
event.getNativeEvent().getKeyCode()!=KeyCodes.KEY_LEFT &&
event.getNativeEvent().getKeyCode()!=KeyCodes.KEY_RIGHT){
String c = event.getCharCode()+"";
if(RegExp.compile("[^0-9]").test(c))
textbox.cancelKey();
}
}
가 IntegerBox 또는 LongBox 중 하나를 사용하여 텍스트 상자를 교체합니다.
이것은 숫자를 허용하는 것과 의미 상 동일한 것은 아니지만 대부분의 경우에는 틀림없이 좋습니다. 또한 정수형 구문 분석을 무료로 수행 할 수 있습니다.
그러나 숫자가 아닌 값을 붙여 넣는 복사를 방지하지는 못합니다. – Stultuske
그러나 이것은 꽤 기본적인 것이므로 약간의 인터넷 검색 결과로 해결할 수 있어야합니다. – toman
GWT ValueBox, DoubleBox, IntegerBox 또는 LongBox를 사용하지 않는 특별한 이유는 모든 유효성 검사, 서식 지정 및 I18N 지원입니다. –
SSR
이 작업을 백 스페이스로 처리하고 Tab 키를 사용하여 탐색합니다. – knocker