我正在努力解决JqueryUI及其自动完成小部件的问题。每当它找到至少一个匹配时,小部件就会显示正常。如果用户未选择其中一个提案并继续键入,则会出现此问题。这是一个例子:
自动完成查找匹配,一切正常。
用户继续输入,搜索结果缩小,一切都还可以
用户继续输入更多内容,没有匹配,但小部件仍保持打开状态。
这是我想要摆脱的行为。我正在运行JqueryUi 1.9.2版。我阅读this question并尝试使用小部件的“响应”事件,如建议的那样。
response: function(event, ui) {
if (ui.content.length === 0) {
$("#field").autocomplete('close');
}
}
不幸的是,在我的情况下,这没有任何结果,因为在最后一场比赛失败时没有触发响应事件。
有没有办法解决这个问题?
编辑:似乎更高版本的jQuery UI解决了这个问题。不幸的是,升级到版本1.10+意味着很多变化,这个库像我项目中的任何地方一样使用。这听起来像是一次极度巨大的时间投入来解决一个小麻烦。我正在寻找的是一种更容易的解决方法。答案 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");
}
}
这就完成了工作。