JQuery UI自动完成始终显示所有条目

时间:2016-01-10 16:48:07

标签: jquery ruby-on-rails json autocomplete

我正在尝试在Rails应用中实现JQuery UI自动完成功能,我已经访问了这个question,但它没有帮助我。

我的问题是JQuery总是显示所有条目,我给出的输入无关紧要,它总是建议我每个条目。

这是我的代码:

JS:

$(function() {
    $( "#customer_city_input_field_" ).autocomplete({
        source: '/cities.json'
    });
});

滑轨:

# GET /cities
  # GET /cities.json
  def index
    @cities = City.all
    list = @cities.map {|u| Hash[ id: u.id, label: "#{u.postcode} #{u.name}", name: u.name, dialing_code: u.dialing_code]}
    respond_to do |format|
      format.html
      format.json {
        render json: list
      }
      end
    end

如果我访问domain.com/cities.json,我会得到以下输出:

  

[{“id”:1,“label”:“10000 City”,“name”:“City”,“dialing_code”:1234}]

此条目始终显示,因此自动完成功能正常... 我还尝试将源从资源更改为本地变量。

JS:

$(function() {
    var availableCities = [{"id":1,"label":"1000 City","name":"City","dialing_code":1234}];
    $( "#customer_city_input_field_" ).autocomplete({
        source: availableCities
    });
});

所以我做的是将/cities.json的输出复制到局部变量,自动完成就像魅力一样。它完全应该做它应该做的事情。如果我将源从Rails资源更改为局部变量,我知道为什么行为会有所不同吗?

1 个答案:

答案 0 :(得分:1)

查看有关jquery自动完成小部件的文档,尤其是'source'选项:http://api.jqueryui.com/autocomplete/#option-source

它声明:

  

自动完成插件不会过滤结果,而是添加一个带有术语字段的查询字符串,服务器端脚本应使用该字段来过滤结果。例如,如果source选项设置为“http://example.com”并且用户键入foo,则会向http://example.com?term=foo发出GET请求

这意味着您将不得不编辑索引操作。如果存在参数term,那么您应该执行@cities = City.where('name ILIKE ?', "%#{params[:term]}%")

之类的操作