jQueryUI自动完成响应数据

时间:2013-05-14 14:05:39

标签: jquery-ui autocomplete jquery-ui-autocomplete

SCENARIO

我在页面中有一个jQueryUI autocomplete。通过AJAX调用检索数据。一切都很好。

问题

对于jQueryUI APIsource属性是一个设置器。

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

换句话说,如果我重新聚焦自动完成绑定输入并且它仍包含先前搜索的术语,我是否可以显示自动完成结果而无需重新排除ajax调用?

我已经搜索了类似的questions。 感谢SirDerpington,我成功重新打开了结果菜单。仍然,AJAX调用被重新处理。

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

所以问题仍然存在。

2 个答案:

答案 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)。但想象一下你有一个真实的请求并保存响应。使用真实来源时它会正常工作。 (当缓存结果且输入没有改变时,警报不会弹出)

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

评论中也提到了这里,但又来了:Documentation Entry

答案 1 :(得分:0)

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

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

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