2014-01-18 56 views
1

因此,我正在使用jquery ui自動完成,其中顯示的列表通過WebSockets獲取。在輸入字段(.keyup())上的每個按鍵上都會調用獲取列表的函數。問題在於,一旦我輸入一個字符並獲取並顯示相應的列表,下一次擊鍵將在前一列表中的輸入字段中搜索搜索參數,而不是搜索到的新字符。要獲得新選項,我需要按退格鍵。例如,如果我在輸入中輸入「S」,則取出並顯示與「S」對應的結果。如果我進一步輸入「h」,使搜索詞「sh」,那麼與「sh」對應的列表被提取,但自動完成搜索在先前列表內搜索「sh」。簡單地說,列表不會立即刷新。我怎樣才能讓列表立即刷新?預先感謝您的幫助。Jquery UI自動完成列表不刷新

UPDATE:所以這裏有一個位代碼: 這是檢測擊鍵和搜索發起

$('#pick_up_location').keyup(function(e) { 
var param = $("#pick_up_location").val();         
var userType = "1";            
search(param, userType,"CBPickSearchAction", "", 0);               

這是部分地方將顯示在自動完成收到了效果:

function onMessage(data) { 
try 
    { 
    var obj = $.parseJSON(data); 
    $("#pick_up_location").autocomplete({ 
     source: obj, 
      minLength: 0, 
     delay: 0, 
     autoFocus: true, 
     search : function() { 
     }, 
      //open : function(){$(this).removeClass('working'); $(".ui-autocomplete").width($(this).width());}, 
      focus: function(event, ui) { 
       event.preventDefault(); 
       return false; 
       }, 
       open : function(event, ui){ 
        $('#pick_up_location').autocomplete("widget").width(); 

      .data("ui-autocomplete")._renderItem = function(ul, item) { 
      return $("<li></li>") 
       .data("item.autocomplete", item) 
       .append("<a>" + item.label + "</a>") 
       .appendTo(ul); 
      }; 

      $("#pick_up_location").autocomplete('enable'); 
      $("#pick_up_location").keydown(); 
    } catch(err) 
     { 
     //console.log(err.message); 
     } 
+0

我認爲這會有幫助,如果你包括你的代碼。 – flitig

+0

我更新了我的帖子,代碼爲 – user1869109

+0

當代碼不完整時(有幾個缺失大括號和括號)並且沒有正確縮進,很難看到任何潛在的問題。你能修復你的代碼示例嗎?或者也許創建一個[jsfiddle](http://jsfiddle.net/)? – flitig

回答

0

所以最後我找到了一個解決方案。問題在於,通常在從另一個域檢索自動完成列表時,會發出ajax調用以將結果返回給源。但是,由於我的目標是製作此商業應用程序,同時使用websockets替代所有ajax調用,因此自動填充不能按需使用。另外,我僅限於自己打開所有的API調用,只打開一個websocket。

我所要做的只是在javascript中爲websocket創建一個新的連接,並使用它的onmessage函數接收結果並將它們放置在自動完成的響應中。以前,自動完成的源代碼是一個包含返回結果的var變量。但是,這並沒有像預期的那樣正常工作,因爲在每次擊鍵時,它只是通過已經存在的結果進行搜索。您必須輸入退格才能刷新列表。

下面是修改後的代碼片段:

function locationSearch() { 
    $("#pick_up_location").autocomplete({ 
     source: function(request,response) { 
      var action = "CBPickSearchAction"; 
      var userType = 1; 
      var requestString = createRequestStringForLocationSearch(action, userType, request.term); 
      webSocket_local.send(requestString); 

      webSocket_local.onmessage = function(event) { 
       data = event; 
       data = formatLocationResponse(data, action); 
      response($.parseJSON(data)); 
      }; 
     }, 
     minLength: 0, 
     delay: 0, 
     autoFocus: true, 
      focus: function(event, ui) { 
       event.preventDefault(); 
       return false; 
       }, 
       open : function(event, ui){ 
        $('#pick_up_location').autocomplete("widget").width(); 
      }, 
      .data("ui-autocomplete")._renderItem = function(ul, item) { 
      return $("<li></li>") 
       .data("item.autocomplete", item) 
       .append("<a>" + item.label + "</a>") 
       .appendTo(ul); 
      }; 
} 



    $('#pick_up_location').keyup(function(e) { 
     locationSearch(); 
} 

因此我的目標是創建一個免費的Ajax的Web應用程序中完成的。 :)

如果有人有更好的解決方案,我會有興趣知道。