我正在使用自定义的组合框jquery ui小部件(类似于这个http://jqueryui.com/autocomplete/#combobox)
问题是具有空值(“”或“”)的项呈现如下:
<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!
答案 0 :(得分:8)
我发现了这个: http://api.jqueryui.com/menu/#method-_isDivider 这就是我的回答......
这是覆盖用于自动完成菜单的默认_isDivider函数的方法:
input.data("uiAutocomplete").menu._isDivider= function( item ) {
return false;
}
答案 1 :(得分: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" );
}
});
所以,最简单的解决方案:添加与正则表达式不匹配的文本。我推荐转义字符
:
... .append($("<a>").html("" + item.label))...