fly*_*llo 14 ruby-on-rails ruby-on-rails-3
我正在尝试创建一个表单,在选择某些元素后向表单添加元素.例如,在用户选择国家/地区之后,我希望有一个ajax调用,其中找到与该国家/地区关联的所有区域/州,然后将其插入到表单中的select元素中.然后,一旦用户选择区域/状态,将发生相同的过程,并且将另一个元素添加到表单中以响应所选值.作为旁注,我想以不引人注目的方式做到这一点.到目前为止,我认为这一点:
<%= 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 %>
Run Code Online (Sandbox Code Playgroud)
然后在该视图的javascript文件中,我在选择国家时处理ajax调用:
$('#country_selection').change(function(){
$.ajax({
url: "find/country_selection",
type: "GET",
data: {'country=' + $('#country_selection option:selected').value() },
})
});
Run Code Online (Sandbox Code Playgroud)
然后,在我的控制器里面,我上面的url:路线有:
def country_selection
@country = Country.find(params[:country])
@regions = @country.regions
respond_to do |format|
format.js { }
end
end
Run Code Online (Sandbox Code Playgroud)
最后,在我的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" %>');
Run Code Online (Sandbox Code Playgroud)
我没有得到这个工作.我甚至不确定我是以正确的方式做到这一点.当我点击选择并更改选项时,页面上的任何内容都不会更改.
解
我的代码基本上没问题,但'.change'事件没有得到认可.我将其更改为'.live('change',function(){...})'并且它工作得很好.
这不是我见过的最简洁的代码,但我认为它从根本上没有任何问题。
我会在那里发出一些警报,以便您可以缩小问题的范围。您可以在更改函数中添加一个以确保它被命中,您可以在country_selection.js.erb 中添加一个以确保它被命中。这会有一点帮助。
我还会更改country_selection.js.erb 以在 div 容器内呈现您想要新选择的部分,这样您就可以将该代码放入部分中,它会更整洁一些。您只需将参数传递给所选国家/地区的部分即可。
| 归档时间: |
|
| 查看次数: |
11189 次 |
| 最近记录: |