2013-01-02 30 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