Почему я получаю эту ошибку JS? - PullRequest
8 голосов
/ 08 апреля 2011

Я получаю эту ошибку JS:

jquery-1.5.1.min.js:16Uncaught TypeError: Cannot set property '_renderItem' of undefined
d.d.extend._Deferred.f.resolveWithjquery-1.5.1.min.js:16
d.d.extend.readyjquery-1.5.1.min.js:16
d.c.addEventListener.A

и это из этого кода для плагина автозаполнения пользовательского интерфейса jquery в моем файле application.js:

    .data( "autocomplete" )._renderItem = function( ul, item ) {
         return $( "<li></li>" )
           .data( "item.autocomplete", item )
           .append( "<a>" + item.topic.name + "</a>" )
           .appendTo( ul );
            };

Я получаю этот код всякий раз, когда загружаю страницу, на которой НЕ содержится текстовое поле, на котором действует код автозаполнения. Почему и как я могу избавиться от этой ошибки?

Хочу отметить, что, хотя я получаю эту ошибку, мое приложение работает нормально. Должен ли я беспокоиться об этой ошибке?

Ответы [ 4 ]

10 голосов
/ 08 апреля 2011
$(...).data('autocomplete')

не определено, и вы не можете установить свойство undefined.попробуй:

var obj = $(...).data('autocomplete');
obj && (obj._renderItem = function(){
   ...
});
9 голосов
/ 28 января 2013

эта проблема появилась у меня при обновлении jquery ui со старого до 1.10.0

просто изменить

$('.foo').data("autocomplete")._render...;

К

$('.foo').data("uiAutocomplete")._render...;

источник JQueryUI 1.10.0 Проблемы с автозаполнением renderItem

3 голосов
/ 08 апреля 2011

почему бы просто не обернуть код автозаполнения в проверку, чтобы увидеть, существует ли этот элемент?

примерно так:

if ($'#myElementId').length) {
    $('#myElementId').data( "autocomplete" )._renderItem = function( ul, item ) {
         return $( "<li></li>" )
           .data( "item.autocomplete", item )
           .append( "<a>" + item.topic.name + "</a>" )
           .appendTo( ul );
    };
}
0 голосов
/ 08 апреля 2011

Я думаю, .data("autocomplete") не возвращает объект, так как ошибка говорит:

Невозможно установить свойство '_renderItem' из неопределенного

Если вы делаетеthis:

$('.foo').data("autocomplete")._render...;

Вы пытаетесь разбить это:

$('.foo').data("autocomplete");
$('.foo')._renderItem = ...;

Я никогда не сталкивался с _renderItem, поэтому я посмотрю подробнее на этом.


На самом деле, этот вопрос, кажется, объясняет проблему, действительно похожую на вашу: Использование _renderItem вида разрывов в поле автозаполнения

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...