2010-10-18 72 views
5

我有一個jQuery UI自動完成控件,當minLength = 3時觸發Ajax請求。問題如下: 說我輸入「fic」作爲初始搜索字詞 - 這很好。請求觸發並返回結果。我決定不想選擇任何結果,然後再次重新輸入相同的搜索(fic)。這一次沒有Ajax請求觸發!jQuery UI自動完成不會觸發搜索,當輸入迄今搜索的術語

我的代碼如下所示:

// ... 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 
} 


爲了得到它每次啓動時,我只需在搜索返回後將搜索詞重置爲空。這樣,它按預期工作。

事情是我不明白這種行爲。我會認爲每個搜索應該是不同的。沒有緩存(或者不應該)。

所以,儘管我已經解決了我的問題,我仍然覺得我錯過了這裏的一些東西。

任何想法的人?提前致謝!

+0

Whate做你的[**'search' **](http://docs.jquery.com/UI/Autocomplete#event-search)事件看喜歡?據我瞭解,自動完成應該在第二種情況下觸發。 – 2010-10-18 01:44:03

+0

請注意如何輸入'jav'將其刪除,然後再次輸入,並且它仍然可以在此演示中運行==> http://jsfiddle.net/KFrQm/。 – 2010-10-18 01:55:55

+0

嗨,彼得 - 我沒有搜索事件。沒有必要開始搜索。你對這個例子是正確的。我之前意識到這一點 - 唯一的區別是我的源代碼是ajax請求。 – peetj 2010-10-18 07:59:35

回答

6

我已經找到了解決這一問題(信息,我使用jQuery UI 1.8.4)

在jQuery的UI-1.8.4.custom.js的自動完成功能的實現具有被定義爲方法_更改。通過註釋如果聲明,控件始終發送請求。

..., 
_change: function(event) { 
    //if (this.previous !== this.element.val()) { 
     this._trigger("change", event, { item: this.selectedItem }); 
    //} 
}, 
... 
+0

鄧肯 - 感謝您的回答 – peetj 2011-03-11 11:07:41

+0

可以確認這個結合w/Stefaan的答案在1.8.14中工作。謝謝。 – 2013-03-11 19:53:49

6

我已經設法解決這個問題,註釋掉這個if語句在jquery ui自動完成的源代碼中。

// keypress is triggered before the input value is changed 
clearTimeout(self.searching); 
self.searching = setTimeout(function() { 
    // only search if the value has changed 
    //if (self.term != self.element.val()) { 
     self.selectedItem = null; 
     self.search(null, event); 
    //} 
}, self.options.delay); 
7

而是改變jquery.ui,你可以嘗試刪除屬性 「上一個」 的價值,做這樣的事情:
$(本)。數據()autocomplete.previous = NULL;

+0

我在jquerymobile自動完成面臨同樣的問題這裏是鏈接http://stackoverflow.com/q/18798630/2307391 – 2013-09-14 05:53:13

+0

gezequiel的答案爲我工作,只在我的情況下它是:$(this).data()。 autocomplete.term = null; – Babayoto 2013-10-24 13:25:06

+0

關於jQuery ui 1.10.2'$(this).data()。uiAutocomplete.term = null;'爲我工作 – Safareli 2014-05-27 12:14:50

0

偉大的技巧在這裏 - 這是我一直在努力的一段時間。

對我來說,始終如一地運作的唯一解決方案就是將鄧肯和斯特凡的答案結合在一起。

1

由於JQuery UI 1.8+,您可以使用小部件工廠擴展所有自動填充小部件的默認行爲。 簡單地包括與在此之後內容的JavaScript文件jQueryUI的

// Extend jquery UI autocomplete 
$.widget("ui.autocomplete", $.ui.autocomplete, { 
    _close: function(event) { 
     var ret = this._super(); 

     // Resets previously used search term 
     this.term = null; 

     return ret; 
    } 
});