我坚持使用jQuery 1.7和jQueryUI 1.8.6,目前无法升级(我们有相当多的弃用和删除代码,此时无法升级)。
我可以使用jQueryUI's AutoComplete control,但我无法弄清楚如何使用类别 - 使用示例found here。
$.widget( "custom.catcomplete", $.ui.autocomplete, {
_create: function() {
this._super();
this.widget().menu( "option", "items", "> :not(.ui-autocomplete-category)" );
},
_renderMenu: function( ul, items ) {
var that = this,
currentCategory = "";
$.each( items, function( index, item ) {
var li;
if ( item.category != currentCategory ) {
ul.append( "<li class='ui-autocomplete-category'>" + item.category + "</li>" );
currentCategory = item.category;
}
li = that._renderItemData( ul, item );
if ( item.category ) {
li.attr( "aria-label", item.category + " : " + item.label );
}
});
}
});
我收到错误:this._super is not a function
,如果我删除该行,则在使用widget()
调用Cannot read property 'element' of undefined
时,以下行失败。
我知道jQuery插件的语法在版本之间发生了变化,但我似乎无法修改他们的示例,以便它可以与旧版本一起使用。 This question在1.7中暗示了略微不同的语法,但是当我摆弄它时,我只是不断出现错误。
知道我需要改变什么来使这项工作?
答案 0 :(得分:1)
_super
方法是在较新版本的jQuery UI中创建的,并且在以前的版本中不存在。要解决此问题,您可以致电$.ui.autocomplete.prototype._create.call(this);
,它基本上与_super
相同。
只要_renderItemData
没有退出,您就必须将其更改为_renderItem
,然后调用.data( "ui-autocomplete-item", item );
您的完整代码更改为:
$.widget("custom.catcomplete", $.ui.autocomplete, {
_create: function () {
$.ui.autocomplete.prototype._create.call(this);
this.widget().menu("option", "items", "> :not(.ui-autocomplete-category)");
},
_renderMenu: function (ul, items) {
var that = this,
currentCategory = "";
$.each(items, function (index, item) {
var li;
if (item.category != currentCategory) {
ul.append("<li class='ui-autocomplete-category'>" + item.category + "</li>");
currentCategory = item.category;
}
li = that._renderItem(ul, item).data('ui-autocomplete-item', item);
if (item.category) {
li.attr("aria-label", item.category + " : " + item.label);
}
});
}
});