2011-05-28 64 views
21

此答案 - jQueryUI: how can I custom-format the Autocomplete plug-in results? - 介紹如何monkeypatch jqueryUI自動填充小部件,以便以特定方式顯示內容。它使用的方法是替換$.ui.autocomplete.prototype上的函數。如何在頁面上修補*一個*自動完成的實例?

這意味着全部自動完成小部件將獲得此修補程序。

有沒有一種方法可以修補的自動填充小部件只需一個輸入元素? 這是什麼?

當我檢查$('$input').autocomplete時,我看不到任何自動完成fns(_renderItem,_renderMenu,_search等)。

回答

25

查看custom data and display demo。這個演示是不是修改自動完成構件的原型對象,這意味着只有小部件的該實例進行:

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

這裏的工作演示:http://jsfiddle.net/vJSwq/

+0

這似乎不工作在IE中,錯誤始終是「數據(...)」爲空或不是對象。「在這種情況下'data'實際上是不受支持的嗎? http://api.jquery.com/data/中的示例正常工作,並且該頁面上唯一的警告是IE不允許以這種方式處理XML。 – GSerg 2013-02-06 12:14:38

+2

嘗試使用'.data('uiAutocomplete')'代替。這在jQueryUI的最新版本中已更改。 – 2013-02-06 14:02:51

+0

是的,這樣工作,謝謝。 – GSerg 2013-02-06 14:23:34

6

安德魯·惠特克的代碼只是爲了工作一個自動完成輸入。如果您選擇多個輸入元素,則第二個自動填充小部件不會顯示任何代碼。 您必須添加一個的foreach到韓德爾所有選擇的輸入元素,如提及here

$("selector") 
.autocomplete({ ... }) 
.each(function() { 
    $(this).data("autocomplete")._renderItem = function(ul, item) { 
     return $("<li></li>") 
      .data("item.autocomplete", item) 
      .append("<a>" + item.label + "<br>" + item.desc + "</a>") 
      .appendTo(ul); 
    }; 
); 
+0

我今天剛剛碰到這個,有多個實例。謝謝! – stldoug 2014-04-23 21:53:22

1

對於近期版本的jQuery(1.8+)/ jQuery用戶界面(1.10+),你應該使用:

$("selector").autocomplete({ ... }).data('uiAutocomplete')._renderItem = function(ul, item) { 
    return $("<li></li>") 
     .data("item.autocomplete", item) 
     .append("<a>" + item.label + "<br>" + item.desc + "</a>") 
    .appendTo(ul); 
}; 
相關問題