所以我正在构建一个自定义自动填充框,其中一个看起来像这样的本地数据数组是数据源:
{
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"
}
}
}
然而,某种程度上焦点事件没有定义项目。我试图完全摆脱焦点功能,只得到:未捕获的TypeError:无法读取未定义的属性“值”。这意味着事件默认行为不起作用。
欢迎任何建议!
这是我用来帮助说明&gt;的小提琴http://jsfiddle.net/ahTCW/3/
答案 0 :(得分:18)
使用_renderItemData
而非_renderItem
使用jQueryUI&gt; = 1.9:
// 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);
});
}
});
您还发生了其他错误:
未捕获的TypeError:无法读取未定义的属性“nodeType”
这是由您传递给位置对象的of
属性的选项引起的。
ul.autocomplete
。