使用键盘时,jQuery自动完成应跳过禁用元素

DHS*_*DHS 7 jquery events jquery-ui jquery-ui-autocomplete

如果你看到这个小提琴演示,不是我做的,那我怎么能避免键盘可以关闭并选择禁用元素?鼠标工作正常(无法选择它)但我可以用键盘下来并选择它,导致空搜索: - /

Fiddle演示来自这篇文章,如何在jQuery自动完成列表中禁用元素

jQuery代码:

$(function () {
var availableTags = [
    "ActionScript",
    "AppleScript",
    "Asp",
    "BASIC",
    "C",
    "C++",
    "Clojure",
    "COBOL",
    "ColdFusion",
    "Erlang",
    "Fortran",
    "Groovy",
    "Haskell",
    "Java",
    "JavaScript",
    "Lisp",
    "Perl",
    "PHP",
    "Python",
    "Ruby",
    "Scala",
    "Scheme"];

$("#tags").autocomplete({
    source: availableTags,
    response: function (event, ui) {
        if (ui.content.length > 3) {
            while (ui.content.length > 3) {
                ui.content.pop();
            }
            ui.content.push({
                'label': 'Please narrow down your search',
                    'value': ''
            });
        }
    }
}).data("ui-autocomplete")._renderItem = function (ul, item) {
    return $("<li " + (item.value == '' ? 'class="ui-state-disabled"' : '') + ">")
        .append("<a>" + item.label + "</a>")
        .appendTo(ul);
};
});
Run Code Online (Sandbox Code Playgroud)

And*_*ker 4

自动完成“知道”根据<a>每个内部的存在来突出显示项目li。您可以通过删除锚点来禁用事件的键盘选择:

.data("ui-autocomplete")._renderItem = function (ul, item) {
        var $el = $("<li>");
        if (item.value === '') {
            $el.addClass("ui-state-disabled")
               .text(item.label);

        } else {
            $el.append("<a>" + item.label + "</a>");
        }

        return $el.appendTo(ul);
    };
Run Code Online (Sandbox Code Playgroud)

示例: http: //jsfiddle.net/m6zvf/12/

  • 这似乎不再适用于新的 jQuery UI (1.11)。很想看到一个解决方案。 (4认同)
  • @ragulka 这肯定是 jQuery UI 1.11 中的一个错误吗?必须显式设置 `this.widget().menu("option", "items", "&gt; :not(.ui-state-disabled)");` 对我来说似乎很奇怪。 (2认同)