0

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});

私は実際にはフィルターを取得していません。

注意すべきいくつかのこと:

  • 私は.autocomplete2つの入力を求めています。私はそれが何かをしたかどうかを確認するために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});    
4

1 に答える 1

0

私はその問題を理解しました。まず、jQuery UIオートコンプリートでサーバーにヒットするのは用語パラメーターであるため、これと照合する必要がありました。したがって、コントローラーのメソッドを次のように変更します。

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 に答える