我该如何解决书写方向?

问题描述 投票:0回答:1

当我按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>
javascript java wicket
1个回答
3
投票

在没有任何验证器的情况下在OnChangeAjaxBehavior上使用TextField并通过onUpdate方法中的Ajax更新TextField将导致该行为。

OnChangeAjaxBehavior上的TextField的工作方式如下:

在用户向TextField中输入内容后,Behavior会使用该输入向服务器发出Ajax请求,并要求其验证该输入。如果有效,则将调用onUpdate方法,否则将调用onError方法。

因此,您的情况将导致以下结果:

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

解决方案很可能是OnChangeAjaxBehavior不是您尝试做的正确方法。 OnChangeAjaxBehavior非常适合具有严格验证的TextField,例如IBAN的输入,因为有效输入的长度是固定的,因此您可以确定用户确定输入的时间。

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

  • 您是否要验证输入?
  • 您是否试图阻止用户在输入/文本字段内输入某些值?
© www.soinside.com 2019 - 2024. All rights reserved.