Как я могу решить направление письма? - PullRequest
0 голосов
/ 16 января 2020

Когда я нажимаю 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>

1 Ответ

3 голосов
/ 16 января 2020

Использование OnChangeAjaxBehavior на TextField без каких-либо валидаторов и обновление TextField с помощью Ajax в методе onUpdate приведет к такому поведению.

OnChangeAjaxBehavior на TextField работает следующим образом:

После того, как пользователь ввел что-то в TextField, Поведение выполнит Ajax запрос к серверу с этим вводом и запросит это для проверки этого ввода. Если он действителен, он вызовет метод onUpdate, в противном случае он вызовет метод onError.

Так что в вашем случае это приведет к следующему:

  1. Вы вводите 4 в TextField
  2. Wicket сделает Ajax Запрос и подтвердит, если 4 является допустимым вводом
  3. Поскольку это допустимый ввод, он вызовет ваш метод onUpdate
  4. Внутри метода onUpdate вы указываете wicket сделать ajax refre sh на Input / TextField
  5. Из-за этого Ajax обновление курсора внутри Input / TextField сбрасывается на первую позицию

Скорее всего, решение состоит в том, что OnChangeAjaxBehavior не является правильным способом сделать то, что вы пытаетесь сделать. OnChangeAjaxBehavior отлично работает для TextFields, которые имеют строгую проверку, например, для ввода для IBAN, где вы можете определить момент, когда пользователь завершил ввод с уверенностью, потому что допустимые вводы имеют фиксированную длину.

Если вы скажете нам, что именно вы пытаетесь архивировать, мы могли бы указать вам правильное направление архивирования с помощью калитки:

  • Вы пытаетесь проверить ввод?
  • Вы пытаетесь запретить пользователю вводить определенные значения в поле ввода / TextField?
...