javascript - Jquery Ui AutoComplee select ui.item 未定义

标签 javascript jquery jquery-ui autocomplete jquery-autocomplete

我的页面上有一个自动完成功能,可以正确获取并显示数据。 数据:对象 { 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(...)未定义 它解决了这个问题

事实证明我必须改变

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

.data( "item.autocomplete", item )

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

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

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

最佳答案

我自己也遇到过这个问题,当 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 的链接.

关于javascript - Jquery Ui AutoComplee select ui.item 未定义,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19385540/

相关文章:

jquery - 开发时同时使用Dojo、extJS和Jquery有什么缺点?

javascript - 使用 jQuery 输入事件有条件地更新 <td> insideHTML

jQuery UI 对话框链接而不是按钮

javascript - jQuery Sortable 只有一个列表如果取消仍然更新

javascript - Reactjs-setState previous state为第一个参数,props为第二个参数

javascript - 使用组件键从数组 Reactjs 中删除元素

Javascript:替换函数的范围对象

javascript - 使用node_redis客户端正确执行Lua脚本

javascript - 如何在不冲突的情况下进行多个json请求

javascript - jquery ui - 未定义不是对话框上的函数