Jquery autocomplete - custom html for result listing

前端 未结 4 1565
夕颜
夕颜 2020-12-24 12:59

I am referring to this plugin: http://jqueryui.com/demos/autocomplete/

So the original structure for the results is

相关标签:
4条回答
  • 2020-12-24 13:23

    You could try add the attributes with the event "open":

    $( ".selector" ).autocomplete({
        open: function(event, ui) {
            var jArrEl = $("a.ui-corner-all");
            jArrEl.addClass("myclass");
            jArrEl.attr("customattribute","something");
        }
    });
    
    0 讨论(0)
  • 2020-12-24 13:24

    You need to replace the _renderItem method (for the autocomplete in question):

    $("selector").autocomplete({ ... })
       .data( "autocomplete" )._renderItem = function( ul, item ) {
            return $( "<li></li>" )
                .data( "item.autocomplete", item )
                .append( "<a class='myclass' customattribute='" + item.customattribute + "'>" + item.label + "</a>" )
                .appendTo( ul );
       };
    

    (assuming the items in your source have a property called customattribute)

    As shown in this example: http://jqueryui.com/demos/autocomplete/#custom-data

    0 讨论(0)
  • 2020-12-24 13:35

    This is also documented in jquery-ui autocomplete documentation at: Jquery-autocomplete.

    The trick is:

    1. Use this jquery extension: github Code
    2. Then in autocomplete option pass

      html:true
      
      ...autocomplete({
      ...
      html:true
      ...
      }
      

      );

    3. Now you can pass html(like <div>sample</div>) in "label" field of JSON output for autocomplete.

    If you don't know how to add the plugin to JQuery then:

    1. Save the plugin(Scott González' html extension) in a js file or download the js file.
    2. You have already added the jquery-ui autocomplete script in your html page(or the jquery-ui js file). Add this plugin script after that autocomplete javascript file.

    Post date: 28th July, 2013

    0 讨论(0)
  • 2020-12-24 13:36

    You can use create event for autocomplete for newer versions. Like this:

    create: function () {
                $(this).data('ui-autocomplete')._renderItem = function (ul, item) {
                    var path = 'basepath' + item.value;
                    return $('<li class="divSelection">')
                        .append('<div>')
                        .append('<img class="zoom" src="' + path + '" />')
                        .append('<span>')
                        .append(item.label)
                        .append('</span>')
                        .append('</div>')
                        .append('</li>')
                        .appendTo(ul); // customize your HTML
                };
            }
    

    For full code review, I am attaching the way I bound autocomplete to my textbox.

    $('.myTextBox').autocomplete({
            source: function (request, response) {
    
                // your call to the server
            },
            select: function (event, ui) {
                // when item is selected
                $(this).val(ui.item.label);
            },
            create: function () {
                $(this).data('ui-autocomplete')._renderItem = function (ul, item) {
                    var path = 'basepath' + item.value;
    
                     return $('<li class="divSelection">')
                        .append('<div>')
                        .append('<img class="zoom" src="' + path + '" />')
                        .append('<span>')
                        .append(item.label)
                        .append('</span>')
                        .append('</div>')
                        .append('</li>')
                        .appendTo(ul); // customize your HTML
                };
            }
    });
    
    0 讨论(0)
提交回复
热议问题