0

这很奇怪。jQuery UI自动完成缺少_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 2015-03-13 09:52:01

+0

是的。不幸的是,使用数据('uiAutocomplete')或数据('ui-autocomplete')或普通数据('autocomplete')不起作用并引发相同的错误。使用__renderItem不会引发错误,但它也不会执行任何操作。 __renderItem = function(ul,item){ \t \t \t console.log(item,'item'); \t \t}; 不记录。 – pop 2015-03-13 09:56:03

+1

那么,如果if条件'(item.checked)'为false,'_renderItem'函数将返回'undefined'。显然你不能调用那个 – blgt 2015-03-13 10:00:54

回答

1

如果(item.checked)条件为false,_renderItem函数将返回undefined。它可能只是需要一个else块:

// ... 
._renderItem = function (ul, item) { 
       if (item.checked) { 
        return $("<li>") 
          .text(item.label) 
          .addClass('preselected') 
          .appendTo(ul); 
       } 
       // else 
       return $("<li>").appendTo(ul); 
     };