【问题标题】:How do I avoid the automatic search from a jQuery UI Autocomplete component?如何避免来自 jQuery UI 自动完成组件的自动搜索?
【发布时间】:2018-03-29 01:59:49
【问题描述】:

现在如果我像这样初始化我的组件:

$('#foo').autocomplete({
    delay: 0,
    minLength: 1,
    source: self.loadUsers.bind(self),
    select: function(event, ui) {
        $(this).autocomplete('widget').hide();
        var selected = ui.item;
        var element = selected.element;
        // more stuff here
    },
    focus: function() { return false; },
    open: function() { console.log('Opening menu...'); }
})

每次更改#foo 中的文本时,它都会执行搜索(并正确调用loadUsers)。 focusopen 事件将正常工作。

我想要避免的是,实际上,避免以这种方式触发搜索。我只想在按下(或释放,更好)ENTER(keyCode 13)时执行搜索。现在这两个部分都在工作:按下回车时执行搜索,这是由这个事件处理程序完成的:

function(event) {
    if (event.keyCode === 13) {
        var input = $("#foo"); // perhaps $(this) could do the job?
        input.autocomplete('search');
    }
}

但是我想从常规击键/文本更改中删除搜索调用。我尝试调用.off('keyup keydown keypress change'),但不知何故它不起作用:每次我在文本框中输入建议都会出现。

ALSOdisabled: true 指定为选项不起作用,因为当我这样做时,即使仅在我按 ENTER(这是预期功能)和列表元素已正确检索... UI 列表未填充结果,也未显示。

我怎样才能使这个工作?

【问题讨论】:

    标签: jquery-ui jquery-ui-autocomplete


    【解决方案1】:

    为未来的读者找到它:

    您有一个 autocompletesearch 事件,您可以在初始化时像这样处理(或稍后与 'on' 绑定到 'autocompletesearch' 事件):

    search: function(event) {
        if (event.originalEvent) {
            // comes from an AUTOMATIC (orevent-triggered) .search,
            //   instead of coming from the manual call to .autocomplete('search').
            // so we must ban it.
            return false;
        }
    },
    

    当调用.autocomplete('search'[, someValueHere]) 或在输入组件上触发标准事件(keydown、input)时会触发此类事件。在后一种情况下,autocompletesearch 的处理程序中的event (1st) 参数将是一个具有字段.originalEvent 的事件,而在前一种情况下(手动调用搜索方法),事件将没有这样的字段字段。

    因此,当存在此类字段时,您可以返回 false。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-06-05
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多