2014-08-27 25 views
3

我使用自定義的組合框的jQuery UI部件(類似於此http://jqueryui.com/autocomplete/#comboboxjQuery UI的組合框爲空值呈現

的問題是,它有一個空值(「」或「「)的項目呈現爲以下:

<li class="ui-widget-content ui-menu-divider"><a><strong></strong> <strong></strong></a></li> 

代替:

<li title="lib" class="ui-menu-item" id="ui-id-36" tabindex="-1"><a><strong></strong>lstrong></strong>i<strong></strong>b<strong></strong></a></li> 

這導致除法列表中,而不是一個空白行來顯示。

我定製_renderItem看起來是這樣的:

input.data("uiAutocomplete")._renderItem = function(ul, item) { 
        return $("<li title='"+item.value+"'></li>").data("ui-autocomplete-item", item).append("<a>" + item.label + "</a>").appendTo(ul); 
       }; 

哪裏jQuery的改變空值顯示爲一個分隔? (可能值得注意的是,這適用於舊版本的jQuery(1.4.2)和jQuery UI(1.8.3),並在嘗試升級時立即停止工作)

TIA!

回答

6

我發現這一點: http://api.jqueryui.com/menu/#method-_isDivider 所以這就是我的答案...

這是如何覆蓋用於自動完成菜單的默認_isDivider功能:

input.data("uiAutocomplete").menu._isDivider= function(item) { 
         return false; 
       } 
+0

謝謝。事實上,這似乎是一個比圍繞正則表達式更好的方法。 – 2015-07-15 20:44:53

6

Looking at this sourcefile,行6792說

this.menu = $("<ul>").menu({...}); 

所以,自動完成是使用ui.menu小部件內部。菜單窗口小部件,而另一方面,這包含在其refresh功能(在同一個文件行11727):

// Initialize unlinked menu-items containing spaces and/or dashes only as dividers 
    menus.children(":not(.ui-menu-item)").each(function() { 
     var item = $(this); 
     // hyphen, em dash, en dash 
     if (!/[^\-\u2014\u2013\s]/.test(item.text())) { 
      item.addClass("ui-widget-content ui-menu-divider"); 
     } 
    }); 

所以,最簡單的辦法:添加文字不認爲正則表達式匹配。我推薦轉義字符&#27;

... .append($("<a>").html("&#27;" + item.label))... 
+1

謝謝你的迴應,確實很有趣,但我認爲既然價值對我很重要,我寧願嘗試和使用_isDivider方法,但我有點卡住了語法:我想做類似這不起作用:input.data(「uiAutocomplete」)。menu._isDivider:function(item){ \t \t return false; \t} – NinaNa 2014-08-27 11:41:38

+0

您在jQuery代碼中的引用幫助我使用下面的解決方案,再次感謝 – NinaNa 2014-08-27 12:53:33

+0

沒有probs,如果你要這樣做,但是,我建議擴展['_renderMenu'](http:// api。 jqueryui.com/autocomplete/#method-_renderMenu)而不是菜單本身 – blgt 2014-08-27 13:02:28