当我按4,5,6 seriatim时,其文字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>
在没有任何验证器的情况下在OnChangeAjaxBehavior
上使用TextField
并通过onUpdate
方法中的Ajax更新TextField将导致该行为。
OnChangeAjaxBehavior
上的TextField
的工作方式如下:
在用户向TextField中输入内容后,Behavior会使用该输入向服务器发出Ajax请求,并要求其验证该输入。如果有效,则将调用onUpdate
方法,否则将调用onError
方法。
因此,您的情况将导致以下结果:
解决方案很可能是OnChangeAjaxBehavior
不是您尝试做的正确方法。 OnChangeAjaxBehavior
非常适合具有严格验证的TextField,例如IBAN的输入,因为有效输入的长度是固定的,因此您可以确定用户确定输入的时间。
[如果您能告诉我们您要在这里归档的确切内容,我们可能会为您指明如何使用检票口归档的正确方向: