Я передаю автозаполнение пользовательского интерфейса jQuery из локального массива следующим образом:
var articleCategories = [
{
label: "Technical",
value: 1
},
...
];
Мне бы хотелось, чтобы элемент управления отображал только метки в поле для предложений, что он и делает,а также только для отображения метки выбранного элемента в целевом поле ввода , которое в моем случае представляет собой текстовое поле с id
как txtCategory
.
function displaySelectedCategoryLabel(event, ui) {
$("#txtCategory").val(ui.item.label);
$("#hidSelectedCategoryId").val(ui.item.value);
};
var autoComplete = $("#txtCategory").autocomplete({
source: articleCategories,
classes: ...,
position: ...,
focus: function (event, ui) {
$("#txtCategory").val(ui.item.label);
},
select: function (event, ui) {
displaySelectedCategoryLabel(event, ui);
},
change: function (event, ui) {
displaySelectedCategoryLabel(event, ui);
}
});
ТакЯ предоставил переопределения для всех трех событий focus
, select
и change
.Когда я прохожу через отладчик, я вижу, что все они ведут себя так, как я ожидаю, за исключением одной небольшой аберрации, как описано ниже.
Вот что происходит:
Когда я меняю фокус , наводя указатель мыши на элементы в окне предложения, событие focus
работает очень хорошо, отображая метки в целевом поле ввода.
Однако, если я перемещаюсь по элементам в окне предложения с помощью клавиш клавиатуры , еще раз, только value
s появляются в целевом поле ввода.Нужно ли также переоценивать события keypress
, keyup
и keydown
?Но какой контроль, поскольку окно предложения создается динамически.
Когда я выбираю запись из поля предложения, в поле ввода цели отображается label
, подчиняющийся моему обработчику, но тольковкратце, как описано выше.Скоро он вернется к отображению value
, пока я остаюсь внутри целевого элемента управления.
И, как и ожидалось, как только я уберу фокус с внешнего элемента управления,происходит событие изменения, и целевое поле ввода начинает отображать label
согласно моему обработчику.
Что происходит?Я пропустил обработчик событий?
Демо
Вот рабочая демоверсия , которая иллюстрирует проблему.Загрузите всю папку с именем TestJQueryUIAutoComplete , поскольку она содержит файлы jQaseryUI jQueryUI и файлы CSS.Если у вас уже есть эти файлы CSS и JS, вам нужно всего лишь загрузить файл TestJQueryUIAutoComplete.html
.