Jquery ui jquery自动完成焦点事件项未定义

Jquery ui jquery自动完成焦点事件项未定义,jquery-ui,autocomplete,jquery-ui-autocomplete,Jquery Ui,Autocomplete,Jquery Ui Autocomplete,因此,我正在构建一个自定义自动完成框,其中一个本地数据数组看起来像是数据源: { label: "joe", category: "people" } 我定制了rendermenu功能,以启用菜单中的类别,如下所示: $.widget("custom.catcomplete", $.ui.autocomplete, { _renderMenu: function(ul, items) { var self = this,

因此,我正在构建一个自定义自动完成框,其中一个本地数据数组看起来像是数据源:

{
            label: "joe",
            category: "people"
}
我定制了rendermenu功能,以启用菜单中的类别,如下所示:

 $.widget("custom.catcomplete", $.ui.autocomplete, {
    _renderMenu: function(ul, items) {
        var self = this,
            currentCategory = "";
        $.each(items, function(index, item) {
            if (item.category != currentCategory) {
                ul.append("<li class='ui-autocomplete-category'>" + item.category + "</li>");
                currentCategory = item.category;
            }
            self._renderItem(ul, item);
        });
    }
});
其中getConfig是:

function getConfig(data) {
// autocomplete box configuration for searchbars

return {
    delay: 0,
    source: function (request, response) {
        var prune = request.term,
            arr = prune.split(":");

        if (arr.length > 2) {
            response();
        } else {
            response($.ui.autocomplete.filter(data, arr[arr.length - 1]));
        }
    },
    select: function (e, ui) {
        e.preventDefault();
        addBit(ui.item);
        e.originalEvent.stopPropagation();
    },
    focus: function (e, ui) {
        //console.log(e);
        //e.preventDefault();
        //console.log(ui);
        //$('ul.autocomplete li#floatinput input#search').val(ui.item.category + ":" + ui.item.label);
    },
    position: {
        my: "left top",
        at: "left bottom",
        of: $("ul.autocomplete"),
        collision: "flip flip"
    }
}
}
然而,焦点事件并没有定义项。我试图一起去掉focus函数,结果得到:uncaughttypeerror:无法读取未定义的属性“value”。这意味着默认行为不起作用

欢迎任何建议


下面是我制作的一把小提琴,用来帮助说明jQueryUI>=1.9时使用
\u renderItemData
而不是
\u renderItem

// getconfig
$.widget("custom.catcomplete", $.ui.autocomplete, {
    _renderMenu: function(ul, items) {
        var self = this,
            currentCategory = "";
        $.each(items, function(index, item) {
            if (item.category != currentCategory) {
                ul.append("<li style='clear:both'class='ui-autocomplete-category'>" + item.category + "</li>");
                currentCategory = item.category;
            }
            self._renderItemData(ul, item);
        });
    }
});
//getconfig
$.widget(“custom.catcomplete”,$.ui.autocomplete{
_renderMenu:功能(ul,项目){
var self=这个,
currentCategory=“”;
$。每个(项目、功能(索引、项目){
如果(item.category!=当前类别){
ul.追加(“
  • ”+item.category+“
  • ”; currentCategory=item.category; } 自提交数据(ul,项目); }); } });
    出现另一个错误:

    未捕获的TypeError:无法读取未定义的属性“nodeType”

    这是由于传递给position对象的
    属性的
    的选项引起的<代码>ul.autocomplete
    在自动完成小部件实例化时,页面上不存在


    更新示例:

    position对象在我的实际网站中不会是一个bug,我只是没有将所有html都包含在提琴中。但无论如何,非常感谢,我在irc的某个地方也得到了答案:D互联网是个好地方!
    // getconfig
    $.widget("custom.catcomplete", $.ui.autocomplete, {
        _renderMenu: function(ul, items) {
            var self = this,
                currentCategory = "";
            $.each(items, function(index, item) {
                if (item.category != currentCategory) {
                    ul.append("<li style='clear:both'class='ui-autocomplete-category'>" + item.category + "</li>");
                    currentCategory = item.category;
                }
                self._renderItemData(ul, item);
            });
        }
    });