当我连续按4,5,6的时候,它的写法是654,因为行总是保持不变。我使用的是Java & Wicket。
这个部分在java类中:
koordinasyonId.add(new OnChangeAjaxBehavior() {
private static final long serialVersionUID = 3097782061837606985L;
@Override
protected void onUpdate(AjaxRequestTarget target) {
if(koordinasyonId.getModelObject()!=null){
String koordinasyonIdValue = koordinasyonId.getModelObject();
String kordinasyonValue ="";
for(int i=0;i<koordinasyonIdValue.length();i++) {
String regex = "^[0-9]{1,2}([,.][0-9]{1,2})?$";
if (Pattern.matches(regex,koordinasyonIdValue.charAt(i)+"")) {
kordinasyonValue = kordinasyonValue + koordinasyonIdValue.charAt(i);
}else if(".".equals(koordinasyonIdValue.charAt(i)+"") || ",".equals(koordinasyonIdValue.charAt(i)+"")){
kordinasyonValue = kordinasyonValue + koordinasyonIdValue.charAt(i);
}
}
koordinasyonId.setModelObject(kordinasyonValue);
target.add(koordinasyonId);
}
}
});
这部分在html文件中:(实际上javascript可以添加到代码中。所以我在这一部分中使用了)
<script type="text/javascript">
$("#koordinasyonId").change(function(){
let koordinasyonId = document.getElementById("koordinasyonId").value;
let kordinasyonValue;
if(koordinasyonId !=null){
for(var i=0;i<koordinasyonId.length;i++) {
if (!isNaN(koordinasyonId.charAt(i))) {
kordinasyonValue +=koordinasyonId.charAt(i);
} else {
if (koordinasyonId.charAt(i).match(".") ||koordinasyonId.charAt(i).match(",") ) {
kordinasyonValue +=koordinasyonId.charAt(i);
}
}
}
}
document.getElementById("koordinasyonId").value=koordinasyonValue;
});
</script>
发布于 2020-01-16 13:02:05
在没有任何验证器的TextField
上使用OnChangeAjaxBehavior
,并在onUpdate
方法中通过Ajax更新TextField将导致这种行为。
用户在TextField中输入内容后,该行为将使用该输入向服务器发出Ajax请求,并要求服务器验证该输入。如果它有效,它将调用onUpdate
方法,否则它将调用onError
方法。
因此,在您的情况下,这将导致以下结果:
解决方案很可能是OnChangeAjaxBehavior
不是做你想做的任何事情的正确方法。对于有严格验证的TextFields,OnChangeAjaxBehavior
工作得很好,例如IBAN的输入,您可以确定用户完成输入的时刻,因为有效的输入有固定的长度。
如果你能告诉我们你到底想在这里建立什么,我们可能会给你指明一个正确的方向,那就是如何用wicket来建立:
https://stackoverflow.com/questions/59768543
复制