【发布时间】:2014-08-08 23:58:59
【问题描述】:
新表单上有 2 个 id 字段(@module_info_id (id1) 和 @module_action_id (id2))。 id1 和 id2 都是带有 :collection 的下拉菜单。选择 id1 时,会根据 id1 的输入填充 id2。选择 id2 时,会根据 id2 的输入填充 2 个文本框。这是新的.js.erb:
<% if @module_info_id > 0 %> #id1
$('#user_access_module_action_id').empty();
$('#user_access_module_action_id').append('<option value=""></option>');
<% @module_actions.each do |r| %>
$('#user_access_module_action_id').append('<option value="<%=r.id%>"><%= "##{r.id},"+ ' ' + "#{r.name}," + ' ' + "#{r.data_resource.name}" %></option>');
<% end %>
<% end %>
<% if @module_action_id > 0 %> #id2
<% module_action = OnboardDataUploadx.module_action_class.find_by_id(@module_action_id) %>
$('#user_access_action').val('<%=module_action.name%>');
$('#user_access_resource').val("<%=module_action.data_resource.name%>");
<% end %>
问题是当id2改变时,ajax会执行id1循环,去掉id2的选择。控制器没有 id1 的内存,也不知道 id1 是否改变。当 id2 更改时,将执行 id1 的循环。当 id2 改变时,有什么方法可以跳过 id1 的循环执行?
触发变化的jquery代码为:
$(function (){
$('#user_access_engine_id').change(function(){
$.get(window.location, $('form').serialize(), null, "script");
return false;
});
});
$(function() {
$('#user_access_module_action_id').change(function (){
$.get(window.location, $('form').serialize(), null, "script");
return false;
});
});
【问题讨论】:
标签: javascript jquery ruby-on-rails ajax ruby-on-rails-3