2013-01-02 27 views
0

正如我提到的主题,服务器加载大约200-1000毫秒(从调试日志),但我必须再按一个键,使其显示结果。即使我使自动完成延迟时间更长,仍然无法显示结果,我仍然必须按下一个键。自动完成无法等到从服务器加载的JSON

var timer; 
//to wait for x ms until some chars typed 
$("#keyword").bind("keyup", function(e) { 
    if ($(this).val().length > 2) 
    { 
     window.clearTimeout(timer); 
     timer = window.setTimeout(function(){    
      var datax = ""; 
      $(function() { 
       $.getJSON("URI", ({"search":$("#keyword").val()}),function(datax){ 
        $("#keyword").autocomplete({ 
         minLength: 3, 
         delay: 2000, 
         source: datax, 
         focus: function(event,ui){ 
          $("#keyword").val(ui.item.nama); 
          return false; 
         }, 
         select: function(event,ui){ 
          $("#keyword").val(ui.item.nama); 
          $("#btnCariMainHeader").click(); 
          return false; 
         } 
        }) 
        .data("autocomplete")._renderItem = function(ul,item){ 
          return $("<li>") 
          .data("item.autocomplete",item) 
          .append("<a><table width='100%'><tr><td width='60px'>"+"<img height='60px' src='/thumb/" + item.value + ".jpg'/>"+"</td><td><b>"+item.nama+"</b><br><span class='suffix'>"+item.value+" "+item.bu+"</span><br><span class='suffix'>"+item.pos+"</span></td></tr></table></a>") 
          .appendTo(ul); 
        }; 
       }); 
      }); 
     },2000); 
    } 
}); 
+2

你知道自动完成小部件支持从服务器加载数据,通过使用标准JSON格式或自定义回调函数,对吧?你不需要做任何这种糟糕的事情。 –

+0

@Matti谢谢你的解释, 我刚开始学习这个强大的工具。 – akauts

回答

2

在您的代码中,您将获得JSON结果后创建jQuery自动完成。

但请注意,jQuery自动完成并不需要编写所有这些复杂的代码。您可以直接使用远程数据源(采用JSON格式)作为自动完成的输入。此外,不需要绑定用于显示建议的关键事件,这将由插件自动完成。

$("#birds").autocomplete({ 
    source: "search.php", // This is the url that returns the JSON list 
    minLength: 2, 
    select: function(event, ui) { 
     log(ui.item ? "Selected: " + ui.item.value + " aka " + ui.item.id : "Nothing selected, input was " + this.value); 
    } }); 

您可以找到完整的documentation and sample here

+0

谢谢先生...它非常简单,工作... 我刚开始学习这个强大的工具,因为坚持了很长时间与传统编码。 – akauts

+0

不客气...快乐编码... :) – Wolf