我正在使用jquery v 2.0.0和jquery ui 1.10.3
以下是我的jquery ui自动完成代码:
$nameField.combobox({
source: people,
buttonSelector: '.toggleList',
focus: function () {
return false;
},
select: function (event, ui) {
$nameField.val(ui.item.name).data({
id: ui.item.id,
name: ui.item.name,
birthdate: ui.item.birthdate
});
return false;
}
}).data('ui-autocomplete')._renderItem = function (ul, item) {
if (!_.include(self.idArr, item.id)) {
return $('<li></li>').data('ui-autocomplete-item', item).append('<a>' + item.name + '</a>').appendTo(ul);
}
};
这在旧版本的jquery中完美运行。但升级后,当我点击.toggleList
按钮时,它会第一次打开,然后会有另一个按钮将所选名称添加到div中。之后,当我点击`.toggleList&#39;组合选择器,自动完成未打开。它给了我以下错误:
Uncaught TypeError: Cannot call method 'data' of undefined jquery.ui.autocomplete.js?1376892069:527
有人遇到过这样的问题吗?我尝试了其他stackoverflow线程中提到的几个修复程序,但它们都没有为我工作。
希望有人能帮助我解决这个问题
由于
答案 0 :(得分:2)
有些人认为“ui-autocomplete”是错误的,所以他们使用“autocomplete”或“uiAutocomplete”,但这是错误的。实际上,“ui-autocomplete”是正确的方法。
我遇到了同样的问题,我和朋友发现了这段代码的问题。代替:
.data('ui-autocomplete')._renderItem = function (ul, item) {
if (!_.include(self.idArr, item.id)) {
return $('<li></li>').data('ui-autocomplete-item', item).append('<a>' + item.name + '</a>').appendTo(ul);
}
};
使用:
._renderItem = function (ul, item) {
if (!_.include(self.idArr, item.id)) {
return $('<li></li>').data('ui-autocomplete-item', item).append('<a>' + item.name + '</a>').appendTo(ul);
}
};
我认为组合框和自动完成功能会返回一个数据('ui-autocomplete'),所以如果你键入.data('ui-autocomplete'),你会做类似的事情:
.data('ui-autocomplete').data('ui-autocomplete')
出了什么问题......好吧,实际上我不知道为什么这不起作用,为什么没有这个工作,但相信我,删除.data('ui-autocomplete')并开心!