2011-04-18 32 views
8

當前,我在引用ASHX文件的文本框上使用jQuery UI自動完成功能。將項目附加到jQuery UI自動完成

除了我想在列表末尾追加一個項目:「未找到項目?單擊此處請求添加新項目」,所有內容都正常運行。

我嘗試了下面的代碼行,但它所做的只是格式化項目,我無法追加。

data("catcomplete")._renderItem = function(ul, item) { 
     return $("<li></li>") 
      .data("item.catcomplete", item) 
      .append($("<a class='ui-menu-item'></a>").text(item.label)) 
      .appendTo($('ul').last('.autocomplete-category')); 
    }; 

提示?提示? Mucho gracias! :D

回答

9

您應該在Open event火災後添加額外條目。這將讓您訪問列表,這是您以後的內容,而不是每個元素,這是_renderItem可讓您訪問的內容。

下面是一個例子造型已經被填充到列表中的條目:

$("#myBox").autocomplete({ 
     source: "[URL]", 
     minLength: 2, 
     open: function(event, ui) { 
      $("ul.ui-autocomplete.ui-menu .ui-menu-item:odd").css("background-color","#dedede"); 
     } 
    }); 
+1

謝謝mucho!我會玩弄它。到目前爲止,我做了以下工作: 'open:function(event,ui){//www.ui-uutocomplete.ui-menu .ui-menu-item:odd「).css(」background -color「,」#dedede「); var url =「找不到該項目?請求添加new項目!」; $(「ul.ui-autocomplete.ui-menu」)。append(url); }' 它看起來像我可以追加一個項目到列表的末尾,現在要確保它是一個可點擊的URL。 – curiousdork 2011-04-19 15:16:45

+0

沒關係,我想通了。 :) – curiousdork 2011-04-19 15:22:08

1

你不想_renderItem撥弄。那是呈現一個項目的fn;它會在建議列表中的每個項目中調用一次。

你想要做的是monkeypatch _renderMenu函數。 jQuery UI 1.8.6中的原始定義如下:

_renderMenu: function(ul, items) { 
    var self = this; 
    $.each(items, function(index, item) { 
     self._renderItem(ul, item); 
    }); 
}, 

其他版本的jQuery UI可能基本相同。

在完成$.each之後修補此項以添加您的額外項目。

+0

這看起來很脆弱。如果UI團隊決定更新'_renderMenu'函數的工作方式,則需要更新自己的代碼,因爲'_renderMenu'不是公共API的一部分。 – cdeszaq 2011-04-18 16:41:28

+0

是的,正因如此,它被稱爲* monkeypatching *。有關該技術的更多詳細信息,請參閱http://stackoverflow.com/questions/2435964/jqueryui-how-can-i-custom-format-the-autocomplete-plug-in-results/2436493#2436493。 – Cheeso 2011-04-25 10:35:39