SCENARIO
我在页面中有一个jQueryUI autocomplete
。通过AJAX调用检索数据。一切都很好。
问题
对于jQueryUI API,source
属性是一个设置器。
是否有任何自动填充属性公开检索到的数据?
换句话说,如果我重新聚焦自动完成绑定输入并且它仍包含先前搜索的术语,我是否可以显示自动完成结果而无需重新排除ajax调用?
我已经搜索了类似的questions。 感谢SirDerpington,我成功重新打开了结果菜单。仍然,AJAX调用被重新处理。
$('mySelector').autocomplete().on("focus", function () {
$(this).autocomplete("search");
})
所以问题仍然存在。
答案 0 :(得分:1)
如果我理解你,如果用户重新聚焦输入,你想要显示相同的结果吗?
在我的 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
答案 1 :(得分:0)
我通常使用javascript数组对象填充文本字段自动完成数据。因此,在页面加载时,该文本字段将始终只有自动完成的指定文本。类似的东西:
var contentArray = ["John", "Doe"];
$("#textfieldid").autocomplete({
source: contentArray
很抱歉,如果我误解了你的问题,但如果可以,我想提供帮助。