在选项“来源”中,我使用ajax得到结果+ 1个自定义注释文本,其中包含有关可能结果的信息。喜欢:“显示3456个结果中的2个”。它只是用户的信息。
对于-ul-列表中的最后一个条目,我不会处理以下事件: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-autocomplete ui-menu ui-widget ui-widget-content ui-corner-all" role="listbox" aria-activedescendant="ui-active-menuitem" style="z-index: 1; top: 39px; left: 79px; display: block; width: 273px;"> <li class="ui-menu-item" role="menuitem"> <a class="ui-corner-all" tabindex="-1">Result 1</a> </li> <li class="ui-menu-item" role="menuitem"> <a class="ui-corner-all" tabindex="-1">Result 2</a> </li> <li class="">Show 2 of 3456 results</li> </ul>
如果它至少给出最小的一个实际结果,而不仅仅是最后一个音符文本。
但是如果没有结果可用且只有注释文本(最后一项)“没有结果”,那么我会在事件中收到一条错误消息:keyup,keydown,pageup和pagedown。
Firebug中的错误:item.offset()为null
<ul class="ui-autocomplete ui-menu ui-widget ui-widget-content ui-corner-all" role="listbox" aria-activedescendant="ui-active-menuitem" style="z-index: 1; top: 39px; left: 79px; display: block; width: 273px;"> <li class="">No Results</li> </ul>
如何添加自定义列表结尾并且无法选择?
jQuery-UI 1.8.13
答案 0 :(得分:2)
我发现如果您的li
元素不包含a
标记,则此小部件会抱怨。我意识到这使得它可以选择,所以你要么必须为你的情况扩展一些类,要么创建一个CSS规则,确保li
没有得到一个选定状态(这有点像黑客攻击,我承认)
答案 1 :(得分:1)
为什么不绑定到select
和change
事件来检查您要添加到对象的自定义数据(可通过ui.item
参数获取,而不是弄乱CSS选择器对那些事件)?你最终会得到这样的东西:
$(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()
只会停止该事件。在某些情况下(使用键盘导航列表时),它将使用项目的值填充输入。如果您确定所选项目或要更改的值实际上是您的数据项,则您希望测试重置文本框的值。