У меня есть калитка AutoCompleteTextField
. Для обновления модели я использую событие onblur. И мне нужно обновить текстовое поле после события «onblur», потому что требуется проверка.
Вот пример кода для иллюстрации проблемы
Подкласс веб-страницы:
public class TestPage extends WebPage {
private Integer testField;
public TestPage() {
final List<Integer> allowedValues = new ArrayList<Integer>();
for (int i = 0; i < 5; i++) {
allowedValues.add(50 + i * 5);
}
final PropertyModel<Integer> testModel = new PropertyModel<Integer>(this, "testField");
final AutoCompleteSettings autoCompleteSettings = new AutoCompleteSettings();
autoCompleteSettings.setShowListOnEmptyInput(true);
autoCompleteSettings.setShowListOnFocusGain(true);
final AutoCompleteTextField<Integer> testInput =
new AutoCompleteTextField<Integer>("testInput", testModel, autoCompleteSettings) {
@Override
protected Iterator<Integer> getChoices(final String input) {
return allowedValues.iterator();
}
};
testInput.setOutputMarkupId(true);
testInput.setMarkupId("testInput");
add(testInput);
testInput.add(new AjaxFormComponentUpdatingBehavior("onblur") {
@Override
protected void onUpdate(final AjaxRequestTarget target) {
target.add(testInput);
}
});
}
}
Соответствующий HTML:
<?xml version="1.0" encoding="UTF-8"?>
<html xmlns="http://www.w3.org/1999/xhtml"
xmlns:wicket="http://wicket.apache.org/dtds.data/wicket-xhtml1.4-strict.dtd" xml:lang="en"
lang="en">
<body>
<input type="text" wicket:id="testInput"/>
</body>
</html>
Проблема в том, что невозможно выбрать значение щелчком мыши.
Я пытался использовать OnChangeAjaxBehavior
- и выбор щелчком мыши работает, но я не хочу выполнять проверку после каждого отдельного изменения (например, пользователь хочет ввести 54, он набирает 5 => проверка начинается, потому что OnChangeAjaxBehavior
запущен)
Я пытался использовать комбинацию AjaxFormComponentUpdatingBehavior("onblur")
и OnChangeAjaxBehavior
, и у меня была та же проблема: невозможно выбрать значение щелчком мыши, потому что «onblur» запускается перед «onchange»
Обратите внимание, что если вы прокомментируете строку target.add(testInput);
, она будет работать как положено.
Это похоже на эту проблему Wicket.
В нем говорится, что проблема исправлена для версии 6.18.0, но я использую именно Wicket 6.18.0 и эта проблема все еще есть.
Мы выполняли обновление с Wicket 1.4 до Wicket 6. И в Wicket 1.4 все работало нормально.
Пожалуйста, дайте мне совет, как решить эту проблему. Ваша помощь будет действительно оценена. Заранее спасибо.
onblur
и проверить его вonchange
. - person RobAu   schedule 24.03.2015OnChangeAjaxBehavior
, и это сработало для меня. Упомянутая вами проблема коснулась и меня, и для меня она была исправлена. - person Robert Niestroj   schedule 24.03.2015OnChangeAjaxBehavior
будет работать, но пользователю это будет неприятно. Представьте себе следующее: у меня есть допустимый диапазон 40-90. Пользователь вводит 5, поэтому вOnChangeAjaxBehavior
я проверяю его, показываю сообщение об ошибке (5 не находится в диапазоне) и, поскольку я обновляю поле - курсор перемещается в первую первую позицию в текстовом поле. Согласитесь, это будет довольно неприятно. - person ComeOn   schedule 24.03.2015OnchageAjaxBehavior
я используюAjaxFormComponentUpdatingBehavior('onchange')
, который не срабатывает каждый раз, когда я что-то ввожу. И во время обновления компонента я устанавливаю курсор в последнюю позицию в поле ввода. - person ComeOn   schedule 26.03.2015