【问题标题】:JqueryUI : close autocomplete widget when last match lostJqueryUI:最后一场比赛丢失时关闭自动完成小部件
【发布时间】:2015-02-20 13:53:55
【问题描述】:

我正在努力解决 JqueryUI 及其自动完成小部件的问题。只要找到至少一个匹配项,该小部件就会显示得很好。如果用户没有选择其中一个建议并继续输入,则会出现此问题。这是一个例子:

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

用户不断输入,搜索结果变窄,一切正常

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

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

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

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

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

编辑:似乎更高版本的 jQuery UI 解决了这个问题。不幸的是,升级到 1.10+ 版本意味着很多更改,并且这个库在我的项目中的任何地方都被使用。这听起来像是花费大量时间来解决一个小烦恼。我正在寻找一种更简单的解决方法。

【问题讨论】:

  • 您在哪里看到它自 1.10+ 以来已修复?
  • 您确定控制台没有错误吗?

标签: javascript jquery jquery-ui autocomplete


【解决方案1】:

Brewal 将我引向解决方案:控制台中确实存在错误,关于“未定义”的“长度”属性不可用。我认为这与我对代码的添加有关,但它实际上已经存在,并且隐藏得很好。 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");
    }
}

这样就完成了。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2013-03-19
    • 1970-01-01
    • 1970-01-01
    • 2019-03-30
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多