我尝试了将'autocomplete'重命名为'ui-autocomplete'的解决方案(使用JQueryUI 1.10.0,JQuery 1.8.3),但仍然出现错误:
TypeError:$(...)。autocomplete(...)。data(...)未定义
} }).data('ui-autocomplete')._renderItem = function (ul, item) {
它在1.10.0中定义但我需要覆盖:
_renderItem: function( ul, item ) {
return $( "<li>" )
.append( $( "<a>" ).text( item.label ) )
.appendTo( ul );
},
这是我的全部代码:
var ajaxCall_QuickSearchCompanyId;
$('#QuickSearchCompanyId').autocomplete({
minLength: 2, delay: 300, source: function (request, response) {
if (ajaxCall_QuickSearchCompanyId) {
ajaxCall_QuickSearchCompanyId.abort();
}
ajaxCall_QuickSearchCompanyId = $.ajax({
url: '/Advertiser/Autocompleter/CompaniesDetailed', dataType: 'json',
data: { q: request.term },
success:
function (data) {
$('#QuickSearchCompanyId').removeClass('ui-autocomplete-loading');
response($.map(data, function (item) {
return {
label: item.ID,
value: item.Name,
subsidiaries: item.Subsidiaries,
category: item.Category,
url: (item.URL == null) ? '' : item.URL,
parentName: item.ParentName,
isReported: item.IsReported
}
}));
}
});
}
}).data('ui-autocomplete')._renderItem = function (ul, item) {
String.prototype.chunk = function (n) {
var ret = []; for (var i = 0, len = this.length; i < len; i += n) { ret.push(this.substr(i, n)); }
return ret;
}; ul.attr('id', 'ul_QuickSearchCompanyId'); return $('<li></li>')
.data('ui-autocomplete-item', item)
.append("<a style='padding: 0px;'><div style='margin-bottom: 0px; width: 450px;'><table style='height: 100%; width: 450px; font-family: Calibri; font-size: 10pt;'><tr><td style='width: 280px; border-right: solid 1px Black; padding: 0px; color: " + ((item.isReported != true) ? 'Gray' : 'Black') + "; font-style: " + ((item.isReported != true) ? 'italic' : 'none') + ";'>" + ((item.parentName != '[[root]]') ? (item.parentName + ': ') : '') + item.value + "</td><td align='right' valign='top' style='width: 150px; padding: 0px; color: " + ((item.isReported != true) ? 'Gray' : 'Black') + "; font-style: " + ((item.isReported != true) ? 'italic' : 'none') + ";'>" + item.category + "<br /></td></tr></table></div></a>")
.appendTo(ul);
};
任何想法都会受到很大关注。
答案 0 :(得分:19)
而不是
$('selector').data('ui-autocomplete')._renderItem = function (ul, item) { };
你应该使用
$('selector').data('uiAutocomplete')._renderItem = function (ul, item) { };
答案 1 :(得分:5)
我遇到了同样的问题。您应该使用$('selector').data('autocomplete')._renderItem = function (ul, item) {...};
或者只需打开控制台并键入以下内容:$('div').autocomplete().data()
在那里你会看到你必须使用的方法。就我而言,它只是'autocomlete'
答案 2 :(得分:5)
好吧,我会和你分享我的小经验。当我遇到同样的问题时,我听到人们谈论将“ui-autocomplete”改为“uiAutocomplete”或者只是“自动完成”,但这是错误的。
正确的是“ui-autocomplete”,这个问题的解决方案不是这个。当我改变我的代码时,我解决了我的问题:
.data('ui-autocomplete')._renderItem = function (ul, item)
to:
.__renderItem = function(ul, item)
尝试这样做并告诉我发生了什么。
答案 3 :(得分:0)
我对此行有同样的问题
.data("autocomplete")._renderItem = function (ul, item) {
我能够通过添加任何这些
来解决错误1 - .data('ui-autocomplete')._renderItem = function (ul, item) {
2 - .data('uiAutocomplete')._renderItem = function (ul, item) {
3 - .__renderItem = function(ul, item) {