jQuery UIオートコンプリートについて他にもたくさんの質問を見てきましたが、私の何が悪いのかまったく同じではありません。
Rails 3.2をjquery-ui-railsプラグイン(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を実行してから、$。getJSONresponseTextで$.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
2つの入力を求めています。私はそれが何かをしたかどうかを確認するために1つを削除しようとしましたが、それはしませんでした - すべての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});