0

我已经看到很多关于 jQuery UI 自动完成的其他问题,但没有一个与我的问题完全一样。

我正在使用带有 jquery-ui-rails 插件的 Rails 3.2(它使用 jQuery UI Autocomplete 1.9.2)。我的文件顶部application.js包含我所有的 jQuery:

//= require jquery
//= require jquery_ujs
//= require jquery.ui.core
//= require jquery.ui.autocomplete

我按照 Railscast #399进行设置,但发现我的自动完成过滤实际上不起作用,除非我进入控制台,在我的源上运行 $.getJSON,然后在 $.getJSON responseText 上运行 $.parseJSON。

没有它,我只是从我的服务器返回的数组中下拉可用字符串。

这是我在 HTML 中的输入:

<%= text_field_tag 'location_name', nil, id: "all_location_search" %>

在该 HTML 上调用 autcomplete 的 CoffeeScript:

$ ->
  # autocomplete location input
  $('#all_location_search').autocomplete
    source: "/autocompletions/locations"

在 AutoCompletionsController#locations 中:

def locations
  render json: AutoComplete.locations_by(params[:location_name])
end

在 AutoComplete.rb 中:

def self.locations_by(term)
  current = Profile.pluck(:current_location).reject{|n| n.blank?}
  current.grep(/^#{term}/)
end

现在,如果我将浏览器指向localhost:3000/autocompletions/locations我会看到以下内容:

["Arlington, VA","Atlanta, GA","Boston, MA","Coral Springs, FL","Philadelphia, PA","Sterling, VA"]

但就像我说的,除非我进入控制台,否则运行类似:

locations = $.getJSON("/autocompletions/locations")
locationJson = $.parseJSON(locations.responseText)
$('#all_location_search').autocomplete({source: locationJson});

我实际上没有过滤器。

需要注意的几点:

  • 我正在调用.autocomplete两个输入。我尝试删除一个以查看是否有任何作用,但没有
  • 我尝试删除每个 JavaScript 以查看是否是另一个文件导致了问题,但没有找到任何东西
  • 当我加载应该是 jQuery UI 自动完成的输入页面时的 HTML 输出与我在 Chrome 的开发者控制台中输入以下两个选项时得到的 HTML 输出相同。

<input id="all_location_search" name="location_name" type="text" data-validate="true" class="ui-autocomplete-input" autocomplete="off">

选项1

$('#all_location_search').autocomplete({source: "/autocompletions/locations"});

选项 2

locations = $.getJSON("/autocompletions/locations")
locationJson = $.parseJSON(locations.responseText)
$('#all_location_search').autocomplete({source: locationJson});    
4

1 回答 1

0

我弄清楚了这个问题。首先,使用 jQuery UI Autocomplete 访问服务器的是一个术语参数,所以我必须与之匹配。所以改变我的控制器方法:

def locations
  render json: AutoComplete.locations_by(params[:location_name])
end

至...

def locations
  render json: AutoComplete.locations_by(params[:term])
end

修复它。我在其他答案中看到过这一点,但我认为我在输入时并没有考虑到我的术语是否区分大小写。只要确保你寻找params[:term].

于 2013-02-01T03:55:08.783 回答