jQueryUI的自动完成响应数据

问题描述:

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

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

+0

+1。好点,它的作品。缺点:ajax调用被重新执行。 – 2013-05-14 14:45:23

+0

也许[远程缓存](http://jqueryui.com/autocomplete/#remote-with-cache)功能可以解决?没有机会使用服务器端源测试'autocomplete'。 – SirDerpington 2013-05-14 14:59:04

+0

我刚加了一个更新的小提琴。如果您重新聚焦输入并且输入值相同,请求不会触发。但是,如果您希望在最多一次请求时只让它触发一次,并将响应设置为源,例如使用'availableTags'作为源时 – SirDerpington 2013-05-14 15:31:45

我通常用JavaScript数组对象来填充我的文本字段自动完成数据。因此,在页面加载时,该文本字段将始终只包含用于自动完成的指定文本。例如:

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

对不起,如果我误解了你的问题,但我想帮忙,如果我可以。