将表单提交给两个可能的不同控制器

时间:2010-11-03 20:28:54

标签: javascript jquery ruby-on-rails forms

我在网站上有以下表格

<% form_tag({ :action => :subid}, :id=>'run_report', :name => 'run_report') do %>
 Beginning Date <%=  date_select("post", "start_date", :start_year => 2010,:order =>    [:month, :day, :year]) %><br />
 End Date <%=  date_select("post", "end_date", :start_year => 2010,:order => [:month, :day, :year]) %><br />
 <%= submit_tag 'Run', :name => "submit", :class => "submit_btn" %>
<% end %>

我想添加另一个名为Generate的按钮,该按钮与下面的表单一样传递相同的变量(start_date和end_date)但是调用action而不是run。理想情况下,我想这样做,而不必有两个重复的表格。

感谢任何帮助。

2 个答案:

答案 0 :(得分:1)

或者您可以绑定按钮onclick动作类似

$("#your_button_id").click(function() {
  $.post("second_url", $("#your_form_id").serialize());
  return true;
});

答案 1 :(得分:0)

可以使用javascript。在视图中,您可以使用name属性或html5数据属性,如下所示。主要的想法是,有必要将某个url存储到正确的表单操作中。

<% form_tag(:id=>'run_report', :name => 'run_report') do %>

 <%= submit_tag 'Run', :name => "submit", :data-action => "#{url_for(action1)}", :class => "submit_btn" %>
 <%= submit_tag 'Generate', :name => "generate", :data-action => "#{url_for(action2)}", :class => "submit_btn" %>
<% end %>

简单的JQuery脚本(应该可以工作但未经过测试):

var $form = $('#run_report);
$('#run_report :submit').click(function() {
  $form.attr('action', $(this).attr('data-action')).addClass('ready').submit();
});

$form.submit(function(e){ 
  if(!$form.hasClass('ready')) {
    e.preventDefault();
});

诀窍是,虽然表单没有类ready,但它不会被提交。然后在设置正确的表单操作后添加此类。

当我使用值初始化隐藏的表单字段时,这取决于单击的按钮但具有相同的表单操作。虽然您的案例中的方法可以是相同的。希望这个方向能帮助你。