JqueryUI:上次匹配丢失时关闭自动完成小部件

时间:2015-02-20 13:53:55

标签: javascript jquery jquery-ui autocomplete

我正在努力解决JqueryUI及其自动完成小部件的问题。每当它找到至少一个匹配时,小部件就会显示正常。如果用户未选择其中一个提案并继续键入,则会出现此问题。这是一个例子:

自动完成查找匹配,一切正常。

用户继续输入,搜索结果缩小,一切都还可以

用户继续输入更多内容,没有匹配,但小部件仍保持打开状态。

这是我想要摆脱的行为。我正在运行JqueryUi 1.9.2版。我阅读this question并尝试使用小部件的“响应”事件,如建议的那样。

response: function(event, ui) {
    if (ui.content.length === 0) {
        $("#field").autocomplete('close');
    }
}

不幸的是,在我的情况下,这没有任何结果,因为在最后一场比赛失败时没有触发响应事件。

有没有办法解决这个问题?

编辑:似乎更高版本的jQuery UI解决了这个问题。不幸的是,升级到版本1.10+意味着很多变化,这个库像我项目中的任何地方一样使用。这听起来像是一次极度巨大的时间投入来解决一个小麻烦。我正在寻找的是一种更容易的解决方法。

1 个答案:

答案 0 :(得分:0)

Brewal指示我采用解决方案:控制台确实存在错误,大约"长度"属性不适用于" undefined"。我认为这与我对代码的添加有关,但它实际上已经存在,很好地隐藏了。 map()在后台使用length属性,它根本无法映射到空结果集。

我改变了这个:

success: function(data) {
   response($.map(data.fieldList, function() {
        // some treatment
    }));
}

进入这个:

success: function(data) {
    if (data.fieldList !== undefined) {
        response($.map(data.fieldList, function() {
            // some treatment
        }));
    } else {
        $("#field").autocomplete("close");
    }
}

这就完成了工作。