[英]How to have 2 chained ajax calls on the same form in Rails 3.2?
在新表单上有2个id字段(@module_info_id(id1)和@module_action_id(id2))。 id1和id2都是下拉菜单,在表单上带有:collection。 选择id1时,将根据id1的输入填充id2。 选择id2后,将根据id2的输入填充2个文本框。 这是new.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;
});
});
填写第二个选择,并使用jquery在选择的更改事件中填充两个文本字段,如下所示:
第一次选择更改时:
$('#user_access_engine_id').change(function(){
var val = this.val();
if(val != null){
$('#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 %>;
}
//refresh select related to its type
//as example chosen-select as the following
$('.chosen-select').trigger("chosen:updated");
}
当第二个选择更改时:
$('#user_access_module_action_id').change(function (){
var val = this.val();
if(val != null){
$('#user_access_module_action_id').append('<option value=""></option>');
<% 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%>");
}
//refresh select related to its type
});
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.