Рекомендуемый способ изменить отображение элементов списка в списке предложений для автозаполнения - переопределить метод _renderItem
. Внутри этого метода вы должны сделать несколько вещей:
- Добавить
li
к переданному в ul
. li
должен содержать тег a
.
- Свяжите правильные данные с этим
li
- Верните это
li
.
Помимо этого, вы можете выполнять любую произвольную логику форматирования, какую пожелаете. Вот как я бы обновил ваш код:
$("input#autocomplete").autocomplete({
delay: 10,
minLength: 0,
source: updates,
select: function( event, ui ) {
window.location.href = ui.item.value;
}
}).data("autocomplete")._renderItem = function (ul, item) {
return $("<li />")
.data("item.autocomplete", item)
.append("<a><img src='" + item.icon + "' />" + item.label + "</a>")
.appendTo(ul);
};
Как видите, добавить тег img
было так же просто, как разместить его внутри тега a
, упомянутого выше. Помните, что вы также можете применять правила CSS к элементам, которые вы добавляете.
Вот полный пример , который использует API StackOverflow для поиска пользователей и показывает их аватары слева от них.
<ч />
Обновление : Начиная с jQueryUI 1.10, вам необходимо получить доступ к данным виджета для автозаполнения, используя .data("uiAutocomplete")
(спасибо, что заметили проблему @ Danny ). Имея это в виду, вот пример, работающий в 1.10:
$("input#autocomplete").autocomplete({
delay: 10,
minLength: 0,
source: updates,
select: function( event, ui ) {
window.location.href = ui.item.value;
}
}).data("uiAutocomplete")._renderItem = function (ul, item) {
return $("<li />")
.data("item.autocomplete", item)
.append("<a><img src='" + item.icon + "' />" + item.label + "</a>")
.appendTo(ul);
};
Пример: http://jsfiddle.net/K5q5U/249/