jQuery自动完成don't选择项目

jQuery autocomplete don't select item

本文关键字:选择 项目 don jQuery      更新时间:2023-09-26

在选项"source"中,我使用ajax获得结果+1个自定义注释文本,其中包含有关可能结果的信息。比如:"显示3456个结果中的2个"。这只是用户的信息。

对于-ul-list中的最后一个条目,我不会处理以下事件:keyup、keydown、pageup和pagedown。

为此,我在选项"打开"中设置为:

open: function(event, ui) {
$("ul.ui-autocomplete.ui-menu li:last").removeClass("ui-menu-item").removeAttr("role").html('Show 2 of 3456 results');
},

HTML现在看起来是这样的:

<ul class="ui自动完成ui菜单ui小部件ui小部件内容ui corner all"role="listbox"aria activedescendand="ui activemenuitem"style="z-index:1;top:39px;left:79px;display:block;width:273px;"><li class="ui菜单项"role="菜单项"><a class="ui corner all"tabindex="-1">结果1<a><李><li class="ui菜单项"role="菜单项"><a class="ui corner all"tabindex="-1">结果2<a><李><li class=">显示3456个结果中的2个<李><ul>

如果它至少给出一个真实的结果,而不仅仅是最后一个注释文本,那么这就有效了。

但是,如果没有结果可用,只有注释文本(最后一项)"没有结果",那么我会在事件中收到一条错误消息:keyup、keydown、pageup和pagedown。

Firebug中的错误:item.offset()为空

<ul class="ui自动完成ui菜单ui小部件ui小部件内容ui corner all"role="listbox"aria activedescendand="ui activemenuitem"style="z-index:1;top:39px;left:79px;display:block;width:273px;"><li class=">无结果<李><ul>

我该怎么做才能在列表末尾添加一个不可选择的自定义li?

jQuery UI 1.8.13

我发现,如果li元素不包含a标记,这个小部件会抱怨。我意识到这使它可以选择,所以你要么必须为你的情况扩展一点类,要么创建一个CSS规则来确保li不会得到一个选定的状态(我承认这有点像黑客)

与其干扰CSS选择器,为什么不绑定到selectchange事件来检查添加到对象中的自定义数据(可通过这些事件的ui.item参数获得)?你最终会得到这样的东西:

$(function() {
    $("#acInput").autocomplete({
                                    source: availableTags,
                                    select: function(event, ui) { 
                                        // if it's your info item, then
                                        event.preventDefault(); 
                                    },
                                    change: function(event, ui) { 
                                        // if it's your info item, then
                                        event.preventDefault();
                                    }
                               });
});

请注意,preventDefault()只是停止该事件。在某些情况下(当使用键盘浏览列表时),它会用项目的值填充输入。如果您确定所选项目或将要更改的值实际上是您的数据项目,则您希望测试重置文本框的值。