我正在使用以下代码将我的jQuery UI自动完成项呈现为HTML。 这些项在自动完成控件中正确呈现,但我不断收到此javascript错误,无法移动它。
Firefox 无法转换JavaScript参数
Chrome 无法设置未定义的属性'_renderItem'
donor.GetFriends(function (response) {
// setup message to friends search autocomplete
all_friends = [];
if (response) {
for (var i = 0; i < response.all.length - 1; i++) {
all_friends.push({
"label":"<img style='padding-top: 5px; width: 46px; height: 46px;' src='/uploads/profile-pictures/" +
response.all[i].image + "'/><br/><strong style='margin-left: 55px; margin-top: -40px; float:left;'>" +
response.all[i].firstname + " " + response.all[i].lastname + "</strong>",
"value":response.all[i].firstname + " " + response.all[i].lastname,
"id":response.all[i].user_id});
}
}
$('#msg-to').autocomplete({
source:all_friends,
select:function (event, ui) {
// set the id of the user to send a message to
mail_message_to_id = ui.item.id;
}
}).data("autocomplete")._renderItem = function (ul, item) {
return $("<li></li>")
.data("item.autocomplete", item)
.append($("<a></a>").html(item.label))
.appendTo(ul);
};
});
不确定为什么会抛出这个错误,或者我必须做些什么才能超越它......任何帮助都表示赞赏。
答案 0 :(得分:189)
由于我刚刚加入并且无法评论 drcforbin 上面的帖子,我想我必须添加自己的答案。
drcforbin 是正确的,虽然它实际上与OP的问题不同。由于刚刚发布的新版jQuery UI,现在有人来到这个线程可能正面临这个问题。有关自动完成的某些命名约定在v1.9的jQuery UI中已弃用,并已在v1.10中完全删除(请参阅http://jqueryui.com/upgrade-guide/1.10/#autocomplete)。
但令人困惑的是,他们只提到从 item.autocomplete 数据标记到 ui-autocomplete-item 的转换,但自动完成数据标记也已重命名为 ui-autocomplete 。而且它更令人困惑,因为演示仍然使用旧的语法(因而被破坏)。
以下是需要在自定义数据演示中的jQuery UI 1.10.0的_renderItem函数中进行更改的内容:http://jqueryui.com/autocomplete/#custom-data
原始代码:
.data( "autocomplete" )._renderItem = function( ul, item ) {
return $( "<li>" )
.data( "item.autocomplete", item )
.append( "<a>" + item.label + "<br>" + item.desc + "</a>" )
.appendTo( ul );
};
固定代码:
.data( "ui-autocomplete" )._renderItem = function( ul, item ) {
return $( "<li>" )
.data( "ui-autocomplete-item", item )
.append( "<a>" + item.label + "<br>" + item.desc + "</a>" )
.appendTo( ul );
};
请注意自动填充和 item.autocomplete 的更改。我已经证实这适用于我自己的项目。
答案 1 :(得分:26)
我遇到了同样的问题......在以后的版本中,它必须是.data("ui-autocomplete")
而不是.data("autocomplete")
答案 2 :(得分:8)
我知道我的答案已经迟到了,但如果将来的人仍然没有得到
.data( "ui-autocomplete-item", item )
上班然后试试这个insted
$(document).ready(function(){
$('#search-id').autocomplete({
source:"search.php",
minLength:1,
create: function () {
$(this).data('ui-autocomplete')._renderItem = function (ul, item) {
return $('<li>')
.append( "<a>" + item.value + ' | ' + item.label + "</a>" )
.appendTo(ul);
};
}
})
});
它对我有用,我遇到登录功能问题..我无法登录,因为它说
Uncaught TypeError: Cannot set property '_renderItem' of undefined
希望这对某人有帮助:)
/卡欣
答案 3 :(得分:6)
我正在使用jquery 1.10.2,它使用:
.data( "custom-catcomplete" )._renderItem = function( ul, item ) {
return $( "<li>" )
.data( "ui-autocomplete-item", item )
.append( "<a>" + item.label + "<br>" + item.desc + "</a>" )
.appendTo( ul );
};
答案 4 :(得分:5)
现在,使用jQuery-2.0.0,它是新模块的名称,但替换了“。” (点)由“ - ”(短划线):
jQuery.widget ('custom.catcomplete', jQuery.ui.autocomplete, {
'_renderMenu': function (ul, items) {
// some work here
}
});
$this.catcomplete({
// options
}).data('custom-catcomplete')._renderItem = function (ul, item) {}
答案 5 :(得分:3)
为任何偶然发现这篇文章的人发布信息。
如果您未将.autocomplete放入文档就绪事件中,则此错误也会显现。
以下代码将失败:
<script type="text/javascript">
$('#msg-to').autocomplete({
source:all_friends,
select:function (event, ui) {
// set the id of the user to send a message to
mail_message_to_id = ui.item.id;
}
}).data("autocomplete")._renderItem = function (ul, item) {
return $("<li></li>")
.data("item.autocomplete", item)
.append($("<a></a>").html(item.label))
.appendTo(ul);
};
</script>
虽然下面的代码可以使用:
<script type="text/javascript">
$(function(){
$('#msg-to').autocomplete({
source:all_friends,
select:function (event, ui) {
// set the id of the user to send a message to
mail_message_to_id = ui.item.id;
}
}).data("autocomplete")._renderItem = function (ul, item) {
return $("<li></li>")
.data("item.autocomplete", item)
.append($("<a></a>").html(item.label))
.appendTo(ul);
};
});
</script>
答案 6 :(得分:1)
根据你使用的jquery ui的版本,它将是“autocomplete”或“ui-autocomplete”,我对combobox插件进行了此更新以解决问题(~ln 78-85)
var autoComplete = input.data("ui-autocomplete");
if(typeof(autoComplete) == "undefined")
autoComplete = input.data("autocomplete");
autoComplete._renderItem = function(ul, item) {
...