2014-01-18 23 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应用程序中完成的。 :)

如果有人有更好的解决方案,我会有兴趣知道。