Wicket 1.5 Автозаполнение Textfield onUpdate Поведение не вызывается - PullRequest
3 голосов
/ 08 ноября 2011

My AutoCompleteTextField (метод getChoices реализован и работает):

AutoCompleteTextField<String> objectDescription = new AutoCompleteTextField<String>("objectDescription") { 
     getChoices() {...}
}

К этому текстовому полю я добавляю:

objectDescription.add(new OnChangeAjaxBehavior()) {
     onUpdate() {....}
}

Метод onUpdate вызывается каждый раз, когда я что-то пишу в своем текстовом поле, но не когда я выбираю какой-либо элемент из меню автозаполнения. Строка из меню записывается в текстовое поле, но вызывает onUpdate только при внесении другого изменения.

Редактировать: до Wicket 1.5 это работало.

1 Ответ

4 голосов
/ 08 ноября 2011

Добавьте 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 не работают вместе

...