是的,在您将我指向他们之前,我已经回顾了有关该主题的六篇文章,但是我仍然对为什么这行不通感到困惑。
我的目标是检测自动填充何时产生0个结果。这是代码:
$.ajax({
url:'sample_list.foo2',
type: 'get',
success: function(data, textStatus, XMLHttpRequest) {
var suggestions=data.split(",");
$("#entitySearch").autocomplete({
source: suggestions,
minLength: 3,
select: function(e, ui) {
entityAdd(ui.item.value);
},
open: function(e, ui) {
console.log($(".ui-autocomplete li").size());
},
search: function(e,ui) {
console.log("search returned: " + $(".ui-autocomplete li").size());
},
close: function(e,ui) {
console.log("on close" + $(".ui-autocomplete li").size());
$("#entitySearch").val("");
}
});
$("#entitySearch").autocomplete("result", function(event, data) {
if (!data) { alert('nothing found!'); }
})
}
});
搜索本身工作正常,我可以毫无问题地显示结果。据我了解,我 应该 能够使用autocomplete(“
result”)处理程序拦截结果。在这种情况下,它根本不会触发。(即使不引用结果数量的通用警报或console.log也不会触发)。打开事件处理程序显示正确的结果数(有结果时),搜索和关闭事件处理程序报告的结果大小始终落后一步。
我觉得我在这里遗漏了一些明显的东西,但我只是看不到它。
jQueryUI 1.9通过response
事件为自动完成小部件提供了祝福,我们可以利用该事件来检测是否未返回任何结果:
搜索完成后触发,然后显示菜单。对于本地处理建议数据很有用,因为不需要自定义源选项回调。即使没有显示菜单,因为没有结果或自动完成功能被禁用,即使搜索结束,该事件也会始终触发。
因此,考虑到这一点,我们在jQueryUI 1.8中不得不做的黑客被替换为:
$(function() {
$("input").autocomplete({
source: /* */,
response: function(event, ui) {
// ui.content is the array that's about to be sent to the response callback.
if (ui.content.length === 0) {
$("#empty-message").text("No results found");
} else {
$("#empty-message").empty();
}
}
});
});
示例: http :
//jsfiddle.net/andrewwhitaker/x5q6Q/
我找不到使用jQueryUI
API做到这一点的简单方法,但是,您可以autocomplete._response
使用自己的函数替换该函数,然后调用默认的jQueryUI函数(
已更新以扩展自动完成prototype
对象)。
var __response = $.ui.autocomplete.prototype._response;
$.ui.autocomplete.prototype._response = function(content) {
__response.apply(this, [content]);
this.element.trigger("autocompletesearchcomplete", [content]);
};
然后将事件处理程序绑定到autocompletesearchcomplete
事件(内容是搜索的结果,一个数组):
$("input").bind("autocompletesearchcomplete", function(event, contents) {
$("#results").html(contents.length);
});
这是在将自动完成response
功能保存到变量(__response
),然后apply
用于再次调用它。我无法想象此方法会产生任何不良影响,因为您正在调用默认方法。由于我们正在修改对象的原型,因此这将适用于所有自动完成的小部件。
这是一个工作示例 :http :
//jsfiddle.net/andrewwhitaker/VEhyV/
我的示例使用本地数组作为数据源,但我认为这并不重要。
更新: 您还可以将新功能包装在其自己的小部件中,以扩展默认的自动完成功能:
$.widget("ui.customautocomplete", $.extend({}, $.ui.autocomplete.prototype, {
_response: function(contents){
$.ui.autocomplete.prototype._response.apply(this, arguments);
$(this.element).trigger("autocompletesearchcomplete", [contents]);
}
}));
将通话从更改.autocomplete({...});
为:
$("input").customautocomplete({..});
然后绑定到自定义autocompletesearchcomplete
事件:
$("input").bind("autocompletesearchcomplete", function(event, contents) {
$("#results").html(contents.length);
});
在这里查看示例 :http :
//jsfiddle.net/andrewwhitaker/VBTGJ/
既然这个问题/答案已经引起了人们的关注,我想我会用另一种方法来完成此问题的更新。当页面上只有 一个
自动完成窗口小部件时,此方法最有用。可以将这种方式应用于使用远程或本地源的自动完成小部件:
var src = [...];
$("#auto").autocomplete({
source: function (request, response) {
var results = $.ui.autocomplete.filter(src, request.term);
if (!results.length) {
$("#no-results").text("No results found!");
} else {
$("#no-results").empty();
}
response(results);
}
});
在里面if
,您可以放置自定义逻辑以在未检测到结果时执行。
示例: http :
//jsfiddle.net/qz29K/
如果您使用的是远程数据源,请说出以下内容:
$("#auto").autocomplete({
source: "my_remote_src"
});
然后,您需要更改代码,以便自己进行AJAX调用,并可以检测到何时返回0结果:
$("#auto").autocomplete({
source: function (request, response) {
$.ajax({
url: "my_remote_src",
data: request,
success: function (data) {
response(data);
if (data.length === 0) {
// Do logic for empty result.
}
},
error: function () {
response([]);
}
});
}
});
问题内容: 我正在尝试实现自动补全功能,但是找不到在Swift中可用的示例。下面,我打算转换Ray Wenderlich的自动完成教程 和2010年的示例代码。最后,代码进行了编译,但是没有显示包含可能完成的表格,而且我没有经验来了解为什么它未被隐藏shouldChangeCharactersInRange。 问题答案: 用下面的内容替换您的函数内容。希望对您有帮助。
问题内容: 遵循了如何安装GoClipse 的说明。 我写的本地包,内置的东西或GAE的东西都没有发生任何自动完成的事情(按照Wiki的说明,我已将Go src下载到SDK文件夹中)。 我是否可以检查任何设置以确保设置正确?自动完成功能应该在当前版本中工作吗? 问题答案: 正如您链接到的带有AppEngine的GoClipse文章所述: 我们假定读者拥有在其Eclipse环境中运行的GoClips
问题内容: 我很难让Alembic使用(Flask-SQLAlchemy)而不是自动生成从更改到类的候选迁移。 我已经进行了修改,以创建我的Flask应用,导入所有相关模型,初始化数据库,然后运行迁移: 这种方法适用于(例如,当重新创建用于单元测试的测试数据库时),但是在这种情况下,它似乎无法实现。自动生成的版本脚本始终具有空的升级和降级方法,例如, 我的更改包括重命名列,更改列定义等,而不仅仅是
问题内容: 运行测试时出现以下异常。我正在使用Mockito进行嘲笑。Mockito库提到的提示无济于事。 来自的测试代码。当我运行以下测试时,我看到了异常。 问题答案: 您是在嘲笑内部嵌套嘲笑。在完成对的模拟之前,您正在呼叫,它会进行一些模拟。执行此操作时,Mockito不喜欢它。 更换 与 要了解为什么这会导致问题,您需要稍微了解Mockito的工作方式,并且还需要知道Java中表达式和语句按
我在运行测试时遇到了以下异常。我在用Mockito来嘲笑。Mockito库提到的提示没有帮助。 从测试代码。当我运行以下测试时,我看到异常。
我想在表单中使用jQuery.AutoComplete.js插件进行输入。我想在客户端进行搜索,不能使用Ajax。但我不想在数组中使用一些简单的基于“包含”的搜索算法。我要做的是用javascript编写一个自定义搜索函数,对结果进行搜索和排序。这可能吗?怎么可能? 谢谢你抽出时间。