如果我理解你的话,如果用户重新关注输入,你想显示相同的结果吗?
在我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");
}
});
请注意文档所说的search
as 方法:
当不带参数调用时,使用当前输入的值。
编辑
使用某种“缓存”似乎是解决问题的好方法。因为我不能真正使用源代码,所以我只使用了 jsfiddle/echo/json/
并将缓存设置为整个源代码(availableTags)。但是假设您有一个真实的请求并保存响应。使用真实来源时它会正常工作。(当结果被缓存并且输入没有改变时,警报不会弹出)
updated fiddle
更新代码
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");
}
});
在评论中也提到过,但在这里再次提到:文档条目