当我按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方法。

因此,在您的情况下,这将导致以下情况:


您在TextField中键入4
Wicket将执行Ajax请求并验证4是否为有效输入
由于它是有效输入,它将调用您的onUpdate方法
在onUpdate方法中,您告诉wicket在Input / TextField上执行Ajax刷新
因此,Ajax更新将Input / TextField内部的光标重置到第一个位置


解决方案很可能是OnChangeAjaxBehavior不是您尝试执行的任何操作的正确方法。 OnChangeAjaxBehavior对于具有严格验证的TextField很有用,例如IBAN的输入,因为有效输入的长度是固定的,因此您可以确定用户确定输入的时刻。

如果您能告诉我们您要在此处归档的确切内容,我们可能会为您指明如何使用检票口归档的正确方向:


您是否要验证输入?
您是否要阻止用户在输入/文本字段内输入某些值?

07-24 19:55
查看更多