0

设想

autocomplete在页面中有一个 jQueryUI。通过 AJAX 调用检索数据。一切正常。

问题

至于jQueryUI API,该source属性是一个设置器。

是否有任何自动完成属性公开检索到的数据?

换句话说,如果我重新关注自动完成绑定输入并且它仍然包含以前搜索的术语,我可以在不重新执行 ajax 调用的情况下显示自动完成结果吗?

我已经搜索过类似的问题。感谢SirDerpington,我成功地重新打开了结果菜单。尽管如此,AJAX 调用仍被重新处理。

        $('mySelector').autocomplete().on("focus", function () {
            $(this).autocomplete("search");
        })

所以问题仍然存在。

4

2 回答 2

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");
    }
});

请注意文档所说的searchas 方法:

当不带参数调用时,使用当前输入的值。

编辑

使用某种“缓存”似乎是解决问题的好方法。因为我不能真正使用源代码,所以我只使用了 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");
    }
});

在评论中也提到过,但在这里再次提到:文档条目

于 2013-05-14T14:40:26.740 回答
0

我通常使用 javascript Array 对象填充我的文本字段自动完成数据。因此,在页面加载时,该文本字段将始终只有指定的自动完成文本。就像是:

var contentArray = ["John", "Doe"];
$("#textfieldid").autocomplete({
   source: contentArray

抱歉,如果我误解了您的问题,但如果可以的话,我想提供帮助。

于 2013-05-14T14:34:08.487 回答