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