繁体   English   中英

JQuery-Ui 自动完成不显示结果

[英]JQuery-Ui Autocomplete not displaying results

我正在尝试显示经理列表的自动完成结果。 我有以下代码:

应用程序.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);
                }
            });
        }
    });

项目 controller

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

路由.rb

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

_form.html.erb

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

以下代码很好,我在 firebug 中没有收到任何错误。 但是,当我尝试输入经理姓名时,例如 James Johnson,该名称不会出现。 我还尝试将整个 function 放入 _form.html.erb 并将其包装在标签中,但这不起作用。 有什么想法为什么会这样

所以我设法修复了我的错误,这是因为 Jquery 内核和 Jquery ui 的排序。

我已经列出了经理。 在下图中。

列出所有用户

从图像中可以看出,当我输入“Arm”时,它会显示整个经理列表,而当它应该显示“Deshawn Armstrong”时。 我知道这很可能与我的项目 controller 有关

项目 controller

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

检查 Firebug 控制台中的响应并确保字符串采用正确的 json 格式以进行自动完成。

看来您只是返回一个数组。 .ajax中的dataType设置不会转换为json 它只是期待这种格式回来。 如果您没有从url: "/managerlist"发回 json ,这可能是问题所在。

实际上,如果您的ajax function 工作正常,您可以:

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

JSON.stringify 的JSON.stringify示例: http://jsfiddle.net/xKaqL/

根据您的新信息,您需要在自动完成中添加一个minLength选项。

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM