#javascript #autocomplete #wicket #textfield
#javascript #автозаполнение #wicket #текстовое поле
Вопрос:
Мое AutoCompleteTextField (метод getChoices реализован и работает):
AutoCompleteTextField<String> objectDescription = new AutoCompleteTextField<String>("objectDescription") {
getChoices() {...}
}
К этому текстовому полю я добавляю:
objectDescription.add(new OnChangeAjaxBehavior()) {
onUpdate() {....}
}
onUpdate
Метод вызывается каждый раз, когда я что-то пишу в своем текстовом поле, но не тогда, когда я выбираю какой-либо элемент из меню автозаполнения. Строка из меню записывается в текстовое поле, но вызывает onUpdate только при внесении другого изменения.
Редактировать: До Wicket 1.5 это работало.
Ответ №1:
Добавьте AjaxFormComponentUpdatingBehavior("onchange")
.
OnChangeAjaxbehavior()
Кажется, что оно срабатывает при каждом изменении (использует Javascript Wicket.ChangeHandler
), как при каждом нажатии клавиши.
Использование AjaxFormComponentUpdatingBehavior
добавит прослушиватель событий к onChange
событиям javascript, например, при выделении текстового поля с другим значением или при выборе значения из списка автозаполнения.
Все еще не уверен, почему не OnChangeAjaxbehavior extends AjaxFormComponentUpdatingBehavior
наследует эту логику от AjaxFormComponentUpdatingBehavior
, должно быть что-то, что она переопределяет.
ОБНОВЛЕНИЕ Это вполне может быть причиной, по которой onchange
события javascript игнорируются при использовании OnChangeAjaxBehavior
. Исходный код для Wicket.ChangeHandler
, найденный в wicket-ajax.js устанавливает обработчики для разных событий:
- Создает резервную копию
onchange
обработчика событий вonchangeoriginal
:
obj.onchangeoriginal = obj.onchange
- Если браузер IE, Safari или какой-либо другой, он присваивает исходный
onchange
обработчик событийonKeyUp
,onpaste
иoncut
. - Если нет, то для
onchange
присваивается исходныйonInput
обработчик события. -
Наконец, он всегда удаляет
onchange
обработчик событий:obj.onchange = function(event){ Wicket.stopEvent(event); }
wicket-autocomplete.js
Похоже, что код в onchange
вручную запускает обработчик событий при выборе элемента. Вероятно, сначала следует проверить obj.onchangeoriginal
.
Итак, поскольку этот js выполняется в OnDomReady
, я сомневаюсь, что эти два поведения могут сосуществовать. Может быть, пришло время создать новый JIRA?
Это может быть немного связанной проблемой: WICKET-2424: OnChangeAjaxBehavior DatePicker не работают вместе
Комментарии:
1. Спасибо, теперь это работает! Не знаю логики, стоящей за этим поведением, для меня это похоже на ошибку…
2. Я тоже обнаружил эту проблему … ее следовало исправить с помощью этого изменения:
obj.onchangeoriginal = obj.onchange;
но все еще работает не так, как ожидалось.3. Да… Кажется, что они должны проверять
obj.onchangeoriginal
сначала вwicket-autocomplete.js
.4. Я отправил проблему по этому поводу: WICKET-4204 .
5. Я не знаю, связано ли это с этой проблемой, но
AjaxIndicator
-Image также не вызывается…