Jquery Ui AutoComplee选择ui.item是未定义的

时间:2013-10-15 15:46:42

标签: javascript jquery jquery-ui autocomplete jquery-autocomplete

我的页面上有一个自动填充功能,可以正确获取和显示数据。 数据:Object { custId="CUST2", invoiceNo="B1"} jquery v1.8.2分钟 jQuery UI - v1.10.3

$("#invoiceNo").autocomplete({
        source : function(request, response) {
            if($.trim($(this.element).val())==""){
               return;
            }
            $.ui.autocomplete.prototype._renderMenu = function(ul, items) {
                var self = this;
                ul.append("<li><table width='100%' class='table table-condensed table-bordered' style='margin-bottom:0px;'><tr><td width='20%'><b>Invoice No</b></td><td width='20%'><b>Customer ID</b></td></tr></table></li>");
                $.each(items, function(index, item) {
                    self._renderItem(ul, item);
                });
            };
            $.getJSON("getInvoiceList.html", {
               query : $.trim($(this.element).val()),
                type:"del",
            }, response).error(function(xhr, ajaxOptions, thrownError) {

            }); 
        },
        open: function() { 
            // After menu has been opened, set width
            $('.ui-menu').width(700);
        },
        minLength : 1,
        select : function(event, ui) {
            alert(ui.item);
            $("#invoiceNo").val(ui.item.invoiceNo);
            //setCustomerDetails(ui.item.number);

            getInvoiceDetailForReturn(ui.item.invoiceNo);
            return false;
        },error: function (xhr, ajaxOptions, thrownError) {
            $.jGrowl(xhr.responseText); 
        }
    }).data("ui-autocomplete")._renderItem = function(ul, item) {               
         return $("<li></li>").data("item.autocomplete-item", item) .append("<a><table width='100%' class='table table-condensed table-hover' style='margin-bottom:0px;'><tr><td width='20%'>" + item.invoiceNo + "</td><td width='20%'>"+item.custId+"</td></tr></table></a>").appendTo(ul);
    };

首先我有错误$(...).autocomplete(...).data(...) is undefined 它解决了这个问题

结果我不得不改变

data("Autocomplete" )._renderItemData = function( ul, item ) {

.data( "item.autocomplete", item )

 data("ui-autocomplete" )._renderItem = function( ul, item ) {

.data( "item.autocomplete-item", item )

所以它没有得到ui.item对象......

1 个答案:

答案 0 :(得分:4)

switching to jQuery-UI 1.10我自己遇到过这个问题。您必须将item.autocomplete-item替换为ui-autocomplete-item

因此,只占用代码块的最后3行:

}).data("ui-autocomplete")._renderItem = function(ul, item) {               
  return $("<li></li>").data("ui-autocomplete-item", item) .append("<a><table width='100%' class='table table-condensed table-hover' style='margin-bottom:0px;'><tr><td width='20%'>" + item.invoiceNo + "</td><td width='20%'>"+item.custId+"</td></tr></table></a>").appendTo(ul);
};

这里再次是指向upgrade guide的链接。