如何避免从jQuery UI自动完成组件自动搜索?

时间:2018-03-28 16:56:32

标签: jquery-ui jquery-ui-autocomplete

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

$('#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)时执行搜索。现在两个部分都在工作:按Enter键时执行搜索,这是由事件处理程序完成的一个键盘:

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

但是我想从常规击键/文字更改中移除搜索调用。我试着打电话给.off('keyup keydown keypress change'),但不管怎么说它都不起作用:每当我输入文本框时,都会出现建议。

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

如何使这个工作?

1 个答案:

答案 0 :(得分:0)

为未来的读者找到它:

你有一个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)时,会触发此类事件。在后一种情况下,event处理程序中的autocompletesearch(1st)参数将是具有字段.originalEvent的事件,而在前一种情况下(手动调用搜索方法),事件不会有这样的领域。

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