繁体   English   中英

有一个表单提交给两个可能的不同控制者

[英]Have a form submit to two possible different controllers

我在网站上有以下表格

<% 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 %>

我想添加另一个名为“生成”的按钮,该按钮将与下面的表单传递相同的变量(start_date和end_date),但调用操作generate而不是run。 理想情况下,我希望不必具有两个重复的表单。

任何帮助表示赞赏。

或者您可以将按钮的onclick动作绑定在一起

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

使用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 ,但不会提交。 并在设置适当的表单操作后添加此类。

当我使用根据单击哪个按钮但具有相同表单操作的值来初始化隐藏表单字段时,这对我有用。 尽管您的情况可能是相同的。 希望这个方向对您有帮助。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM