10

「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);
            };

どんなアイデアでも大歓迎です。

4

4 に答える 4

19

それ以外の

$('selector').data('ui-autocomplete')._renderItem = function (ul, item) { };

あなたが使用する必要があります

$('selector').data('uiAutocomplete')._renderItem = function (ul, item) { };
于 2013-01-22T21:50:11.083 に答える
5

私も同じ問題を抱えていました。あなたは使用する必要があります$('selector').data('autocomplete')._renderItem = function (ul, item) {...};

または、コンソールを開いて次のように入力します。$('div').autocomplete().data()

そこにあなたが使用しなければならない方法が表示されます。私の場合、それはただの「autocomlete」です

于 2013-03-15T12:45:44.287 に答える
5

解決策を見つけました!

さて、私はあなたに私の小さな経験を共有します。この同じ問題が発生したとき、「ui-autocomplete」を「uiAutocomplete」または単に「autocomplete」に変更することについて話している人々の話を聞きましたが、それは間違っています。

正しいのは実際には「ui-autocomplete」です。この問題の解決策はこれではありません。コードを次のように変更すると、問題が解決します。

    .data('ui-autocomplete')._renderItem = function (ul, item)

に:

    .__renderItem = function(ul, item)

それを試してみて、何が起こったのか教えてください。

于 2013-09-24T02:38:08.407 に答える