列出一个记录自动完成

时间:2011-08-12 13:12:27

标签: jquery jquery-ui jquery-ui-autocomplete

使用Jquery自动完成功能,当我输入前三个字母时,我会获得所有管理器的完整列表,而我只能获得一个。我的项目控制器有以下代码

def project_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

我做错了吗?

Example

Application.js

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

    $("#tags").autocomplete({
        minLength: 2,
    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);

            }
        });
    }
});

在上面的图片中,我输入'Arm',我只能显示'Deshawn Armstrong',而是显示完整列表

编辑:

<p>
    <%= f.label :project_name %><br />
    <%= f.text_field :project_name %>
</p>

<p>
    <%= f.label :manager_user_id %><br />
    <%= f.text_field :manager_user_id, :id => "term"%>

</p>

上面是包含表单的mangerlist页面。从你向我解释的内容,我认为你必须像我上面所做的那样在页面上加上var'term'?

1 个答案:

答案 0 :(得分:1)

您是否按request.term过滤了结果?如果不是,那么整个经理列表将作为匹配字符串返回。

Request.term应该发送到您的url: "/managerlist",并且应该返回按术语过滤的结果。

因此,当您通过ajax:/managerlist?term=arm发送时,您的网址将如下所示。获取请求var term并按其过滤列表。这必须在用ruby编写的managerlist页面上完成(我相信)。

实际上,我所说的是ruby页面中的list必须返回按term值过滤的数据:

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

list应仅包含按term

过滤的值