Rails select_tag onchange ajax request
Я пытаюсь создать форму, которая добавляет элементы в форму после выбора определенных элементов. Например, после того, как пользователь выбирает страну, я хочу, чтобы там был вызов ajax, где все регионы/состояния, связанные с этой страной, были найдены, а затем вставлены в элемент выбора в форму. Затем, как только пользователь выбирает регион/состояние, тот же процесс будет иметь место, и другой элемент будет добавлен в форму в ответ на выбранное значение. Как побочная заметка, я хочу сделать это все ненавязчиво. Далеко, у меня это на мой взгляд:
<%= form_tag(find_school_path, :method=>'get', :class => 'form-horizontal', :id => 'find_by_country_form') do %>
<%= label_tag :country_selection, "Country" %>
<%= select_tag :country_selection, options_from_collection_for_select(@countries, :id, :name), :prompt => "Country" %>
<% end %>
Затем внутри этого javascript файла этого представления я обрабатываю вызов ajax при выборе страны:
$('#country_selection').change(function(){
$.ajax({
url: "find/country_selection",
type: "GET",
data: {'country=' + $('#country_selection option:selected').value() },
})
});
Затем внутри моего контроллера, в котором указан выше url:
, я:
def country_selection
@country = Country.find(params[:country])
@regions = @country.regions
respond_to do |format|
format.js { }
end
end
Наконец, в моем файле country_selection.js.erb у меня есть:
$('#country_selection').after('<%= label_tag :region_selection, "State/Region" %><%= select_tag :region_selection, options_from_collection_for_select(@regions, :id, :name), :prompt => "State/Region" %>');
Я не получил этого, чтобы работать. Я даже не уверен, что делаю это правильно. Когда я нажимаю select и меняю этот параметр, ничего на странице не меняется.
Решение
Мой код был очень хорош, но событие ".change" не было распознано. Я изменяю его на .live('change', function() {...}) ', и он работал нормально.
Ответы
Ответ 1
Это не самый аккуратный код, который я видел, но я не вижу в этом ничего плохого.
Я бы добавил несколько предупреждений, чтобы вы могли сузить проблему. Вы можете поместить его в функцию изменения, чтобы убедиться, что он попал, вы можете добавить его в country_selection.js.erb, чтобы убедиться, что он попал. Это немного поможет.
Я бы также изменил country_selection.js.erb, чтобы отобразить частичный внутри контейнера div, где вы хотите, чтобы новый выбор был таким, чтобы вы могли поместить этот код в частичный, и он будет немного более аккуратным. Вы можете просто передать параметр части, которая будет выбрана страной.