回答
您只需驗證某個事件的用戶輸入。它可以是例如每次按鍵(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調用preventDefault在幕後。雖然這種解決方案部分起作用,但它非常有限。 – 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();
}
}
}
在Firefox和Safari中使用此代碼(尚未測試其他人)在GWT 2.5上使用退格鍵不起作用。這也不適用於複製/粘貼,箭頭鍵,主頁/結束或全選。 – 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更換你的TextBox。
這在語義上與僅允許數字的語義不同,但在大多數使用情況下可以說它更好。 您還可以免費進行輸入和輸出整數解析。
儘管如此,它不會阻止您複製粘貼非數字值。 – Stultuske
- 1. 只允許文本框中的整數
- 2. 如何只允許angularjs中的文本框中的數字?
- 3. 文本框掩碼只允許數字
- 4. 只允許在文本框C#數字
- 5. 只允許文本框中的數字值
- 6. 只允許文本框中的數字值?
- 7. 如何只允許文本框中的十進制數字
- 8. 文本框只允許使用字母
- 9. 只允許使用AngularJs的文本框中的字符
- 10. AngularJS問題只允許將數字輸入到文本框中
- 11. 只允許在文本框中輸入數字
- 12. 只允許在WPF文本框中輸入數字
- 13. 文本框只允許浮點數
- 14. 只允許文本框中的特定字符
- 15. jsp中的文本框,僅允許文本,數字和逗號
- 16. 如何只允許日文字符在文本框中
- 17. GWT - 如何只允許TextItem中的數字?
- 18. 只允許一個文本框中的一個小數點
- 19. 當我們只允許使用java腳本的文本框中的數字時允許tab鍵
- 20. WinForms文本框只允許1到6之間的數字
- 21. 只允許範圍內的數字輸入到文本框
- 22. 只允許在文本框中使用字母,數字和正斜槓的JQuery
- 23. 格式c#文本框只允許數字字符
- 24. 允許只有字母數字在文本框使用jQuery
- 25. 如何在reactjs中僅允許文本框中的數字?
- 26. JQuery只允許使用鍵碼的文本框中的數字輸入
- 27. 輸入文本框字段只允許字符不允許數字,但允許空間?
- 28. 只允許WPF中的密碼框中的數字
- 29. 只允許在asp.net中的文本框中輸入字母字符
- 30. 只允許編輯gridviewcell中的數字
順便說一句,這是非常基本的東西,你應該能夠通過一點點谷歌搜索來解決這個問題。 – toman
不使用GWT ValueBox,DoubleBox,IntegerBox或LongBox以及所有驗證,格式化和I18N支持的任何特定原因! –
SSR
將退格工作與此..和導航使用Tab鍵..? – knocker