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

标签 jquery-ui autocomplete jquery-ui-autocomplete

所以我正在构建一个自定义自动完成框,其中看起来像这样的本地数据数组就是数据源:

{
            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);
        });
    }
});

我正在初始化一切都是由以下人员完成的:

 $("#search").catcomplete(getConfig(all));

其中 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"
    }
}
}

但不知何故,焦点事件没有定义项目。我尝试完全摆脱焦点函数,结果却得到: Uncaught TypeError: Cannot read property 'value' of undefined 。这意味着默认行为不起作用。

欢迎任何建议!

这是我为帮助说明而制作的 fiddle > http://jsfiddle.net/ahTCW/3/

最佳答案

在 jQueryUI >= 1.9 中使用 _renderItemData 而不是 _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);
        });
    }
});

您发生了另一个错误:

Uncaught TypeError: Cannot read property 'nodeType' of undefined

这是由您传递给位置对象的 of 属性的选项引起的。实例化自动完成小部件时,页面上不存在 ul.autocomplete

更新示例: http://jsfiddle.net/kHNS5/

关于jquery-ui - jquery 自动完成焦点事件项未定义,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13419438/

相关文章:

html - 加载大数据时垫子自动完成太慢

javascript - 禁用表单密码自动完成但不禁用其他字段

jquery autocomplete - 使用选项卡提前输入执行而不是选择自动完成选项

使用 JSON 的 jQuery UI 自动完成

javascript - 使用 jQuery UI Datepicker 的我的 DataTables 日期范围过滤器仅适用于 Google Chrome

Javascript 拖放 - Illustrator 风格 'smart guides'

javascript - jQuery-UI 禁用某些元素的拖动

javascript - EasyAutocomplete 和输入宽度

javascript - jQuery 自动完成 - 在 IE 中显示焦点值列表

jquery - 带有 anchor 和相应 div 的鼠标悬停效果