1

国を含む選択ボックスがあり、それが選択されたときに、都市フィールドのオートコンプリート データを ajax 経由でロードする必要があります。

ここに私のコードがあります:

// Sets up the autocompleter depending on the currently
// selected country
$(document).ready(function() {
  var cache = getCities();
  $('#registration_city_id').autocomplete(
    {
      source: cache               
    }
  );

  cache = getCities();

  // update the cache array when a different country is selected
  $("#registration_country_id").change(function() {
    cache = getCities();
  });
});

/**
 * Gets the cities associated with the currently selected country
 */
function getCities()
{
  var cityId = $("#registration_country_id :selected").attr('value');
  return $.getJSON("/ajax/cities/" + cityId + ".html");
}

これは次の json を返します: ["Aberdare","Aberdeen","Aberystwyth","Abingdon","Accrington","Airdrie","Aldershot","Alfreton","Alloa","Altricham","Amersham" 、「アンドーバー」、「アントリム」、「アーブロース」、「アードロッサン」、「アーノルド」、「アシュフォード」、「アシントン」、「アシュトン・アンダー・ライン」、「アサートン」、「アイルズベリー」、「エア」。 .. ]

しかし、うまくいきません。都市ボックスに入力を開始すると、スタイルが変更されるため、オートコンプリータが何かを実行していますが、このデータは表示されません。上記をハードコードすると動作します。

誰が何が悪いのか見ることができますか?

ありがとう

4

2 に答える 2

1

リモート JSON データを取得するには、非同期呼び出しにコールバック メソッドを使用する必要があると思います ( Ajax/jQuery.getJSONを参照)。おそらく、都市をグローバル変数に保存するか、応答をオートコンプリート コントロールのソースとして直接設定できます。

function updateCities()
{
    var cityId = $("#registration_country_id :selected").attr('value');
    $.getJSON("/ajax/cities/" + cityId + ".html", function(json){
       CITY_CACHE = json;
       //Alternatively set the source of the autocomplete control
    });
}
于 2010-05-22T21:28:36.020 に答える
0

ありがとう、しかし答えは:

// Sets up the autocompleter depending on the currently
// selected country
$(document).ready(function() {

  setupAutocompleter();

  // update the cache array when a different country is selected
  $("#registration_country_id").change(function() {
    setupAutocompleter();
  });
});

function setupAutocompleter()
{
  var cityId = $("#registration_country_id :selected").attr('value');
  $.getJSON("/ajax/cities/" + cityId + ".html", function(cities) {
    $('#registration_city_id').autocomplete(
      {
        source: cities
      }
    )
  });
}
于 2010-05-23T09:01:50.800 に答える