0

我正在嘗試顯示經理列表的自動完成結果。我有以下代碼:JQuery-Ui自動完成結果不顯示結果

的application.js

function log(message) { 
     $("<div/>").text(message).prependTo("#log"); 
    } 

    $("#managers").autocomplete({ 
     source : function(request, response) { 
      $.ajax({ 
       url : "/managerlist", 
       dataType : "json", 
       data : { 
        style : "full", 
        maxRows : 12, 
        term : request.term 
       }, 
       success : function(data) { 
        var results = []; 
        $.each(data, function(i, item) { 
         var itemToAdd = { 
          value : item, 
          label : item 
         }; 
         results.push(itemToAdd); 
        }); 
        return response(results); 
       } 
      }); 
     } 
    }); 

項目控制器

def manager_list 
    list=Project.all.map{|i|i.manager_user_id} 
    arr= [].concat(list.sort{|a,b| a[0]<=>b[0]}).to_json 
    render :json =>arr 
end 

的routes.rb

match '/managerlist' => 'projects#manager_user_id' 

_form.html.erb

<p> 
     <%= f.label :manager_user_id %><br /> 
     <input id="managers" /> 
    </p> 

下面的代碼是好的,我不螢火收到任何錯誤。但是,當我嘗試輸入經理姓名例如詹姆斯約翰遜的名字不會出現。我也嘗試將整個函數放在_form.html.erb中,並將其封裝在標籤中,這不起作用。是否有任何想法,爲什麼發生這種情況

所以我設法解決我的錯誤,這是因爲JQuery核心和JQuery UI的訂購。

我有經理人列出。在下面的圖片中。

List All users

從圖像中可以看出,當我鍵入「ARM」它帶給管理者的整個列表,當它應該顯示「德肖恩 - 阿姆斯特朗。我明白,這是最有可能與我的項目控制器做以下

項目控制器

def manager_list 
    list=Project.all.map{|i|i.manager_user_id} 
    arr= [].concat(list.sort{|a,b| a[0]<=>b[0]}).to_json 
    render :json =>arr 
end 

回答

2

入住Firebug控制檯的響應,並確保該字符串是在自動完成正確的JSON格式。

看來你只是返回一個數組。 .ajax中的dataType設置不會轉換爲json;它只是期待這種格式回來。如果你不是從你的url : "/managerlist"發回json,這可能是問題所在。

其實,只要你的ajax功能是否正常工作,你可以只:

return response(JSON.stringify({ results: results })); 
JSON.stringify

的jsfiddle例如:http://jsfiddle.net/xKaqL/

基於新的信息,你需要添加一個minLength選項到您的自動完成。

$("#managers").autocomplete({ 
    minLength: 2, // 2 or whatever you want 
    // rest of your code 
+1

@Djj它提示您下載?它應該顯示在瀏覽器的頁面上。但是,如果「ajax」一切正常,仔細看看成功功能。而且,控制檯中顯示的是什麼'autocomplete'功能? –

+1

@Djj是的,您必須確保在調用自動​​完成之前加載jquery核心和jquery ui js文件。看看Firebug的'Net'面板。它會告訴你什麼和什麼時候裝載。 –

+0

@Djj很好,很高興你發現了這個問題。編輯我的答案。 –