2013-05-14 114 views
0

情景jQueryUI的自動完成響應數據

我有一個jQueryUI的autocomplete在一個頁面中。數據通過AJAX調用檢索。一切工作正常。

問題

至於jQueryUI API,該source屬性是一個二傳手。

是否有任何autocomplete屬性公開檢索到的數據?

在其他條款,如果我重新聚焦自動完成約束輸入,它仍然包含以前的搜索術語,我可以顯示自動完成結果,而無需重新excuting Ajax調用?

我已經搜索了類似questions。 感謝SirDerpington,我成功地重新打開了結果菜單。儘管如此,AJAX調用仍被重新處理。

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

所以問題依然存在。

回答

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

+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

0

我通常用JavaScript數組對象來填充我的文本字段自動完成數據。因此,在頁面加載時,該文本字段將始終只包含用於自動完成的指定文本。例如:

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

對不起,如果我誤解了你的問題,但我想幫忙,如果我可以。