我已经看到很多关于 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});