The recommended way to change the display of list items in the list of offers for auto-complete is to override the _renderItem
method. Inside this method you have to do a few things:
- Add
li
to transferred to ul
. li
must contain the tag a
. - Associate the correct data with this
li
- It is true that
li
.
In addition, you can execute any custom formatting logic that you need. Here is how I would update your code:
$("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); };
As you can see, adding an img
tag was as easy as putting it in the a
tag mentioned above. Keep in mind that you can also apply CSS rules to elements that you add.
Here is a complete example that uses the StackOverflow API to search for users and shows their avatars to their left.
Update . As of jQueryUI 1.10, you need to access widget data for autocomplete using .data("uiAutocomplete")
(thanks for noticing @Danny's problem). With that in mind, here's an example working in 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); };
Example: http://jsfiddle.net/K5q5U/249/
source share