2012-11-16 43 views
9

Vì vậy, tôi đang xây dựng một hộp tùy chỉnh autocomplete, nơi một loạt các dữ liệu địa phương trông như thế này là nguồn dữ liệu:jquery mục sự kiện autocomplete tập trung undefined

{ 
      label: "joe", 
      category: "people" 
} 

Tôi đã tùy chỉnh chức năng rendermenu để cho phép loại trong menu như vậy:

$.widget("custom.catcomplete", $.ui.autocomplete, { 
    _renderMenu: function(ul, items) { 
     var self = this, 
      currentCategory = ""; 
     $.each(items, function(index, item) { 
      if (item.category != currentCategory) { 
       ul.append("<li class='ui-autocomplete-category'>" + item.category + "</li>"); 
       currentCategory = item.category; 
      } 
      self._renderItem(ul, item); 
     }); 
    } 
}); 

và tôi initialising tất cả mọi thứ được thực hiện bởi:

$("#search").catcomplete(getConfig(all)); 

nơi getConfig là:

function getConfig(data) { 
// autocomplete box configuration for searchbars 

return { 
    delay: 0, 
    source: function (request, response) { 
     var prune = request.term, 
      arr = prune.split(":"); 

     if (arr.length > 2) { 
      response(); 
     } else { 
      response($.ui.autocomplete.filter(data, arr[arr.length - 1])); 
     } 
    }, 
    select: function (e, ui) { 
     e.preventDefault(); 
     addBit(ui.item); 
     e.originalEvent.stopPropagation(); 
    }, 
    focus: function (e, ui) { 
     //console.log(e); 
     //e.preventDefault(); 
     //console.log(ui); 
     //$('ul.autocomplete li#floatinput input#search').val(ui.item.category + ":" + ui.item.label); 
    }, 
    position: { 
     my: "left top", 
     at: "left bottom", 
     of: $("ul.autocomplete"), 
     collision: "flip flip" 
    } 
} 
} 

Tuy nhiên, sự kiện trọng tâm không có mục được xác định. Tôi đã cố gắng loại bỏ các chức năng tập trung alltogether, chỉ để có được: Uncaught TypeError: Không thể đọc giá trị tài sản 'của undefined. có nghĩa là sự kiện hành vi mặc định không hoạt động.

Bất kỳ đề xuất nào đều được chào đón!

Dưới đây là một fiddle tôi thực hiện để giúp minh họa>http://jsfiddle.net/ahTCW/3/

Trả lời

16

Sử dụng _renderItemData và không _renderItem với jQueryUI> = 1.9:

// getconfig 
$.widget("custom.catcomplete", $.ui.autocomplete, { 
    _renderMenu: function(ul, items) { 
     var self = this, 
      currentCategory = ""; 
     $.each(items, function(index, item) { 
      if (item.category != currentCategory) { 
       ul.append("<li style='clear:both'class='ui-autocomplete-category'>" + item.category + "</li>"); 
       currentCategory = item.category; 
      } 
      self._renderItemData(ul, item); 
     }); 
    } 
}); 

Bạn có một lỗi xảy ra:

Uncaught TypeError: Cannot read property 'nodeType' of undefined

này một là do tùy chọn bạn chuyển đến thuộc tính of của đối tượng vị trí. ul.autocomplete không tồn tại trên trang khi tiện ích tự động điền được khởi tạo.

Được cập nhật Ví dụ:http://jsfiddle.net/kHNS5/

+0

đối tượng vị trí sẽ không có được một lỗi trong trang web thực tế của tôi, tôi chỉ không bao gồm tất cả các html trong fiddle. Nhưng anyways cảm ơn rất nhiều, tôi đã nhận được câu trả lời trên irc một nơi nào đó là tốt: D Internet là một nơi tốt đẹp! –