0

Это странно.jQuery UI autocomplete missing _renderItem

$.fn.autoList = function() { 

return this.each(function() { 

    var self = this; 

    // initiate autocomplete 
    $(self).autocomplete({ 
     source: _li_data, 
     minLength: 2, 
     select: function (event, ui) { 
      ui.item.checkbox.prop('checked', true).trigger('change'); 
      ui.item.checked = !ui.item.checked; 
      $(event.target).val(''); 
      return false; 
     } 
    }) 
    .data('autocomplete')._renderItem = function (ul, item) { 
        if (item.checked) { 
         return $("<li>") 
           .text(item.label) 
           .addClass('preselected') 
           .appendTo(ul); 
        } 
      }; 

});} 

При наборе текста и перед визуализацией результатов я получаю следующее сообщение об ошибке. Uncaught TypeError: Cannot read property 'data' of undefined в JQuery-UI-1.9.0.js: 6672, который имеет следующий код

_renderItemData: function(ul, item) { 
    return this._renderItem(ul, item).data("ui-autocomplete-item", item); 
}, 

То, что я хочу сделать, это добавить «заранее выбранный» класс к -li- элементу в -ul- из выпадающее меню автозаполнения. Я застрял с этим ...

+0

ли вы заканчивали [это] (http://stackoverflow.com/questions/14461787/jqueryui-1-10-0-autocompleter-renderitem-problems)? – anpsmn

+0

Да. К сожалению, использование данных («uiAutocomplete») или данных («ui-autocomplete») или простых данных («автозаполнение») не помогает и выдает ту же ошибку. Использование __renderItem не вызывает ошибку, но это также ничего не делает. __renderItem = function (ul, item) { \t \t \t console.log (item, 'item'); \t \t}; не регистрируется. – pop

+1

Ну, если if-condition '(item.checked)' is false, ваша функция '_renderItem' вернет' undefined'. Очевидно, вы не можете назвать какие-либо функции на этом – blgt

ответ

1

Функция _renderItem вернет undefined, если условие (item.checked) не соответствует действительности. Это, вероятно, просто нужно else блока:

// ... 
._renderItem = function (ul, item) { 
       if (item.checked) { 
        return $("<li>") 
          .text(item.label) 
          .addClass('preselected') 
          .appendTo(ul); 
       } 
       // else 
       return $("<li>").appendTo(ul); 
     }; 
Смежные вопросы