如何在a而不是<ul> </ul> <table> </table>中显示jQuery AutoComplete结果

时间:2011-05-20 16:10:48

标签: jquery jquery-ui autocomplete

我正在使用jQuery UI Autocomplete 1.8.11

我目前正在使用Remote with Caching模式,因此每次自动完成执行都会对服务器进行往返。理想情况下,我会返回自己的HTML表,而不是默认处理它的JSON。

我已经尝试按照this suggestion的规定实施maartenwierda,但我无法让它发挥作用。我不知道是不是因为版本不兼容或我做错了什么。

2 个答案:

答案 0 :(得分:3)

我认为这可以帮助你,这里是js:

$(function() {
//overriding jquery-ui.autocomplete .js functions
$.ui.autocomplete.prototype._renderMenu = function(ul, items) {
  var self = this;
  //table definitions
  ul.append("<table><thead><tr><th>ID#</th><th>Name</th><th>Cool&nbsp;Points</th></tr></thead><tbody></tbody></table>");
  $.each( items, function( index, item ) {
    self._renderItemData(ul, ul.find("table tbody"), item );
  });
};
$.ui.autocomplete.prototype._renderItemData = function(ul,table, item) {
  return this._renderItem( table, item ).data( "ui-autocomplete-item", item );
};
$.ui.autocomplete.prototype._renderItem = function(table, item) {
  return $( "<tr class='ui-menu-item' role='presentation'></tr>" )
    .data( "item.autocomplete", item )
    .append( "<td >"+item.id+"</td>"+"<td>"+item.value+"</td>"+"<td>"+item.cp+"</td>" )
    .appendTo( table );
};
//random json values
var projects = [
    {id:1,value:"Thomas",cp:134},
    {id:65,value:"Richard",cp:1743},
    {id:235,value:"Harold",cp:7342},
    {id:78,value:"Santa Maria",cp:787},
    {id:75,value:"Gunner",cp:788},
    {id:124,value:"Shad",cp:124},
    {id:1233,value:"Aziz",cp:3544},
    {id:244,value:"Buet",cp:7847}
];
$( "#project" ).autocomplete({
    minLength: 1,
    source: projects,
    //you can write for select too
    focus: function( event, ui ) {
        //console.log(ui.item.value);
        $( "#project" ).val( ui.item.value );
        $( "#project-id" ).val( ui.item.id );
        $( "#project-description" ).html( ui.item.cp );
        return false;
    }
})
});

您可以查看此fiddle

这也可能有用fiddle

答案 1 :(得分:1)

为什么不像往常一样以json方式返回数据并在客户端处理它们以表格格式显示:

$( "#targetinput" ).autocomplete({ .... }).data( "autocomplete" )._renderItem = function( ul, item ) {
    return $( "<li></li>" )
        .data( "item.autocomplete", item )
        .append( "<table><tr><td>" + item.id+ " </td><td> " + item.label+ "</td></tr></table>" )
        .appendTo( ul );
};

你可以比上面的例子更有创意:/