回答
您只需验证某个事件的用户输入。它可以是例如每次按键(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. 只允许文本框中的字母数字
- 3. 只允许文本框中的数字值
- 4. 只允许文本框中的数字值?
- 5. 文本框只允许使用字母
- 6. 只允许在文本框中输入数字
- 7. 只允许在WPF文本框中输入数字
- 8. AngularJS问题只允许将数字输入到文本框中
- 9. GWT - 如何只允许TextItem中的数字?
- 10. WinForms文本框只允许1到6之间的数字
- 11. 只允许在文本框中使用字母,数字和正斜杠的JQuery
- 12. 允许只有字母数字在文本框使用jQuery
- 13. 输入文本框字段只允许字符不允许数字,但允许空间?
- 14. JQuery只允许使用键码的文本框中的数字输入
- 15. 只允许WPF中的密码框中的数字
- 16. 只允许在asp.net中的文本框中输入字母字符
- 17. 只允许数字和ctrl + a,ctrl + v,ctrl + c到文本框
- 18. jquery/JS只允许在文本框中输入数字和字母
- 19. 只允许在文本框中输入数字和特殊字符( - )
- 20. 只允许在文本框中使用字母字符的模型验证
- 21. 如何只允许文本输入的数字,但允许JavaScript的命令?
- 22. 如何只允许使用JS的文本框中的所有特殊字符?
- 23. 我想让我的文本框只允许文本
- 24. 只允许数字字符
- 25. VBA用户窗体文本框只允许数字和空文本
- 26. HTML文本框只允许数字,打字时千位分隔符和小数
- 27. 只接受文本框中的数字
- 28. 只允许.25,.50和.75在文本框中
- 29. 允许在文本框中使用HTML
- 30. 如何仅允许使用jquery.validate的文本框中的文本?
顺便说一句,这是非常基本的东西,你应该能够通过一点点谷歌搜索来解决这个问题。 – toman
不使用GWT ValueBox,DoubleBox,IntegerBox或LongBox以及所有验证,格式化和I18N支持的任何特定原因! –
SSR
将退格工作与此..和导航使用Tab键..? – knocker