jQuery UI组合框空值呈现

时间:2014-08-27 09:33:54

标签: jquery jquery-ui autocomplete menuitem

我正在使用自定义的组合框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!

2 个答案:

答案 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" );
        }
    });

所以,最简单的解决方案:添加与正则表达式不匹配的文本。我推荐转义字符&#27;

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