jQueryUI的自动完成响应数据
问题描述:
我有一个jQueryUI的autocomplete
在一个页面中。数据通过AJAX调用检索。一切工作正常。
问题
至于jQueryUI API,该source
属性是一个二传手。
是否有任何autocomplete属性公开检索到的数据?
在其他条款,如果我重新聚焦自动完成约束输入,它仍然包含以前的搜索术语,我可以显示自动完成结果,而无需重新excuting Ajax调用?
我已经搜索了类似questions。 感谢SirDerpington,我成功地重新打开了结果菜单。尽管如此,AJAX调用仍被重新处理。
$('mySelector').autocomplete().on("focus", function() {
$(this).autocomplete("search");
})
所以问题依然存在。
答
如果我理解你的权利,你要表现出同样的结果,如果用户重新论点集中输入?
在我的jsfiddle它似乎工作,但我不知道这是否会触发AJAX呼叫。 反正看到我所做的:
$('#autocomplete').autocomplete({
source: availableTags,
minLength: 0
}).focus(function() {
var $this = $(this);
var inputVal = $this.val();
//just a check to prevent showing all results if inputVal is empty
if (inputVal !== '') {
$this.autocomplete("search");
}
});
通知的docs说什么search
的方法:
当参数调用,则使用当前输入的值。
编辑
使用一种“缓存”似乎是解决您的问题的好办法。因为我无法真正使用源代码,所以我只使用jsfiddle的/echo/json/
并将缓存设置为整个源代码(availableTags)。但想象一下,你有一个真实的请求并保存响应。当使用真实的源代码时它会工作正常。(当结果被缓存在警报未弹出,并输入不改变)
更新的代码
var cache = {};
$('#autocomplete').autocomplete({
source: function (request, response) {
var term = request.term;
//check if searched input is in cache and return it as response
if (term in cache) {
response(cache[term]);
return;
}
$.getJSON("/echo/json/", request, function (data, status, xhr) {
alert("Request triggered!");
//write response in cache
cache[term] = availableTags;
response(availableTags);
});
},
minLength: 0
}).focus(function() {
var $this = $(this);
var inputVal = $this.val();
if (inputVal !== '') {
$this.autocomplete("search");
}
});
在评论中也提到,但在这里再次:Documentation Entry
答
我通常用JavaScript数组对象来填充我的文本字段自动完成数据。因此,在页面加载时,该文本字段将始终只包含用于自动完成的指定文本。例如:
var contentArray = ["John", "Doe"];
$("#textfieldid").autocomplete({
source: contentArray
对不起,如果我误解了你的问题,但我想帮忙,如果我可以。
+1。好点,它的作品。缺点:ajax调用被重新执行。 – 2013-05-14 14:45:23
也许[远程缓存](http://jqueryui.com/autocomplete/#remote-with-cache)功能可以解决?没有机会使用服务器端源测试'autocomplete'。 – SirDerpington 2013-05-14 14:59:04
我刚加了一个更新的小提琴。如果您重新聚焦输入并且输入值相同,请求不会触发。但是,如果您希望在最多一次请求时只让它触发一次,并将响应设置为源,例如使用'availableTags'作为源时 – SirDerpington 2013-05-14 15:31:45