【发布时间】:2011-04-26 17:50:42
【问题描述】:
我有一个 jQuery UI 自动完成控件,它在 minLength = 3 时触发 Ajax 请求。问题如下: 假设我输入“fic”作为初始搜索词 - 这很好。请求触发并返回结果。我决定不想选择任何结果,然后再次重新输入相同的搜索 (fic)。这次没有 Ajax 请求触发!
我的代码如下所示:
// ... do request
$("#reportSearch").autocomplete({
delay: 50,
minLength: 3,
source: function(q, add){
$.ajaxSetup ({ cache: false});
$.ajax({
type: "GET",
url: K_URL_REQUEST
所以基本上在我上面描述的第二种情况下,“源”回调不会被触发。原因似乎是自动完成控件保留了前一个搜索词,并且因为它匹配 - 没有触发搜索:
// Taken from jquery-ui-1.8.4.custom.min.js
if (a.term != a.element.val()) { // *** THE MATCH IS HERE
//console.log("a.term != a.element.val(): "+a.term+", "+a.element.val());
a.selectedItem = null;
a.search(null, c) // *** SEARCH IS TRIGGERED HERE
}
为了让它每次都能触发,我只是在搜索返回后将搜索词重置为空。这样它就按预期工作了。
问题是我不理解这种行为。我会认为每个搜索都应该是不同的。没有缓存(或者无论如何都不应该)。
所以虽然我已经解决了我的问题,但我仍然觉得我在这里遗漏了一些东西。
有什么想法吗?提前致谢!
【问题讨论】:
-
您的 [
search](docs.jquery.com/UI/Autocomplete#event-search) 活动是什么样的?据我了解,自动完成应该在您的第二种情况下触发。 -
注意如何输入
jav删除它,然后再次输入,它仍然可以与这个演示一起工作==> jsfiddle.net/KFrQm。 -
嗨,彼得 - 我没有搜索活动。没有必要开始搜索。你对这个例子是正确的。我之前意识到这一点 - 唯一的区别是我的来源是一个 ajax 请求。
-
这里的 jQuery 自动完成示例:jqueryui.com/demos/autocomplete 操作不一致。输入“d”,它会找到结果“ColdFusion”。如果退格删除“d”,请单击离开,然后再次单击文本框内并输入“d”,有时它什么也找不到。
-
嗨 Peet,有没有一个版本的 jquery-ui-autocomplete 有这个修复?你能指点我吗?如果没有,请发送我必须添加到 1.8.9 jquery-ui 的代码的 sn-p 来解决这个问题,因为我也遇到了这个问题。谢谢
标签: javascript jquery autocomplete