javascript - 键入时不显示 jQuery UI 自动完成

标签 javascript jquery jquery-ui jquery-ui-autocomplete

我正在使用 jQuery UI 自动完成功能来显示文本输入的自动完成。我希望更准确地了解列表何时出现。我已经为 Click 和 Double Click 创建了显示自动完成的触发器(基于用户是否选择包含每个触发器)但我发现没有办法影响在键入时是否显示自动完成。

如何在键入时不显示自动完成(不是由按键事件触发)?

回答

function InitialiseAutoCompleteEx(inputId, trigOnClick, trigOnDoubleClick, trigOnType, trigOnCtrlSpace, rawAutoCompleteItems)
{
    var autoCompleteItems = rawAutoCompleteItems.split("|");
    var input = $("#" + inputId);

    input.autocomplete(
        {
            source: autoCompleteItems,
            minLength: 0,
            disabled: true,
            close: function() { $(this).autocomplete("option", "disabled", true); }
        });

    if (trigOnClick)
    {
        input.click(function()
            {
                $(this).autocomplete("option", "disabled", false);
                $(this).autocomplete("search");
            });
    }

    if (trigOnDoubleClick)
    {
        input.dblclick(function()
            {
                $(this).autocomplete("option", "disabled", false);
                $(this).autocomplete("search");
            });
    }

    if (trigOnType)
    {
        input.keydown(function(event)
            {
                var key = String.fromCharCode(event.which);

                if ( /[a-zA-Z0-9]/.test(key) )
                {
                    $(this).autocomplete("option", "disabled", false);
                    $(this).autocomplete("search");
                }
            });
    }

    if (trigOnCtrlSpace)
    {
        input.keydown(function(event)
            {
                if (event.which == 32 && event.ctrlKey)
                {
                    $(this).autocomplete("option", "disabled", false);
                    $(this).autocomplete("search");
                    event.preventDefault();
                }
            });
    }
}

最佳答案

只需使用它的 disabled option :

$("#field").autocomplete("option", "disabled", true);

var tags = ["c++", "java", "php", "coldfusion", "javascript", "asp", "ruby"];
$("#field").autocomplete({
  source: function(request, response) {
    var matcher = new RegExp("^" + $.ui.autocomplete.escapeRegex(request.term), "i");
    response($.grep(tags, function(item) {
      return matcher.test(item);
    }));
  },
  disabled: true,
});

function disable(shouldDisable) {
  shouldDisable = JSON.parse(shouldDisable); // Extract boolean from string parameter
  $("#field").autocomplete("option", "disabled", shouldDisable);
  $("#field").focus().trigger($.Event("keydown"));
}
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.0/jquery.min.js"></script>
<script src="https://code.jquery.com/ui/1.11.3/jquery-ui.min.js"></script>
<input id="field" />
<button onclick="disable(false);">Autocomplete On</button>
<button onclick="disable(true);">Autocomplete Off</button>

关于javascript - 键入时不显示 jQuery UI 自动完成,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28573398/

相关文章:

javascript - 选择具有最高 z-index 的 DIV

JavaScript 展开/折叠更改图像

javascript - jQuery 动画 - 以不同的速度对不同的 div 进行动画处理

jquery - 为不同的组件定制jquery主题

jquery - 您可以使用 jquery、javascript 或 css 提取背景大小为 'auto' 的值吗?

javascript - 如何在第一个和最后一个列表项处停止切换功能?

JavaScript `typeof` 验证问题

javascript - 使用 Cookie 禁用 Fancybox 弹出窗口

jquery - 如何使用 jQuery 设置嵌套 div 的高度?

css - JQuery UI 自动完成 : Auto height does not respect maxHeight