2014-11-24 41 views
0

我有這個自動完成輸入:jQuery的自動完成不顯示下拉

<input type="text" id="find_user" class="autocomplete_field" /> 

腳本:

$("#find_user").autocomplete({ 
     source: "/get_ajax_data.php?type=find_user", 
     minLength: 3, 
     timeout : 1000, 
     select: function(event, ui) { 
      window.location.href = "/user_admin.php?action=edit&id=" + ui.item.id 

     } 
    }); 

當 「test」 的用戶類型,我得到了如下結果返回:

[{"id":"26","uname":"test 1","firstname":"Test","lastname":"1","email":"[email protected]", ............ 

選擇下拉菜單顯示正常

我添加了一個選項,以顯示所有,把輸入 「*」

$(".autocomplete_field").keyup(function(){ 
      if ($(this).val() == '*') { 
       $(this).autocomplete('search', "___"); 
      } 
     }) 

結果是:

[{"id":"1","uname":"admin","firstname":"Ad","lastname":"Min","email":"","lang_iso_code":null,..................... 

,但沒有選擇下拉列表所示。

它在我的本地機器上工作,所以我認爲它可能是超時問題。這就是爲什麼我添加了超時選項(不確定是否正確)。沒有幫助。 我認爲它可能是其他用戶的數據('測試'用戶(只有兩個其他用戶)...所以我通過填寫他們的名字(admin和cron)單獨搜索這兩個用戶和數據返回罰款與選擇框顯示。

只要我嘗試查看所有在現場,它不顯示選擇下拉列表。 雖然只有5個用戶(admin + cron +三個測試帳號) 約需440ms返回2.2kb的數據。

我使用JQ UI 1.11

編輯:

我只是做了一個測試用「___」作爲搜索文本,所有的用戶都在下拉菜單中顯示。我假設的代碼:

$(this).autocomplete('search', "___"); 

沒有被設置同樣的事情,當我搜索文本「___」

在conlsole

我可以看到由Ajax調用,術語「___」,並結果如上。就好像它不想在我使用'*'時顯示菜單列表,並且只在實時服務器上顯示。本地工作正常。

+0

我建議你看看這篇博客的jQuery UI自動完成的例子 - http://salman-w.blogspot.in/2013/12/jquery-ui-autocomplete-examples.html – Subhash 2014-11-25 06:57:24

回答

0

經過一些更多的測試以及搜索和響應事件中的一些控制檯輸出後,我得出結論,我的代碼必須導致自動填充字段與自身發生衝突。

驗證碼:

$(".autocomplete_field").keyup(function(){ 
     if ($(this).val() == '*') { 
      $(this).autocomplete('search', "___"); 
      console.log(".autocomplete_field search fired"); 
     } 
    }) 

調用PHP頁面,從而返回我在控制檯中看到的數據。 但事件發射的跟蹤過程中,我也看到,原來的搜索功能也被稱爲:

$("#find_user").autocomplete({ 
    .... 
    search: function(event, ui) { 
     console.log("#find_user search fired"); 
    } 

它上面的順序觸發。 因此第二次搜索沒有達到最小長度標準,因此菜單沒有顯示或清除,以便我快速查看任何內容。

與本地測試結果回來快,我認爲,第一搜索發射了,得到的結果,並且菜單顯示出,第二次搜索纔可以發射。

我的解決方法是這樣的:

$(".autocomplete_field").keyup(function(){ 
      if ($(this).val() == '*') { 
       //$(this).autocomplete('search', "___"); 
       $(this).autocomplete("option", "minLength", 1); 
      } else { 
       $(this).autocomplete("option", "minLength", 3); 
      } 
     }) 

與該轉換PHP腳本的變化 「*」 - > 「」,然後能裝進SQL查詢...名稱LIKE「% %」。我可能可以做到這一點,使'_'作爲列表的所有觸發器不是必需的轉換,但我喜歡「*」作爲觸發器。