我正在尝试设置一个包含多个提交操作的formtastic表单,以及Railscast#38。 Formtastic中与此相当的是什么?
<%= submit_tag 'Create' %>
<%= submit_tag 'Preview', :name => 'preview_button' %>
This post给了我希望,但看起来commit_button
在2.1.0中已被弃用,我似乎无法弄清楚新的语法。
这是我的代码,它的价值。我想让每个提交按钮转到同一个控制器,我会以不同的方式处理它们:
# Use prepaid credits to checkout
<%= f.action :submit, :as => :button, :label => "Order Critique (1 credit will be spent)", :button_html => { :class => "btn btn-primary", :disable_with => 'Processing...' } %>
# Use credit card to checkout
<%= f.action :submit, :as => :button, :label => "Order Critique ($10)", :button_html => { :class => "btn btn-primary", :disable_with => 'Processing...' } %>
答案 0 :(得分:0)
TL; DR:如果您使用javascript提交表单,则不会在提交参数中继承提交按钮的名称。
我的问题最终成为Railscasts Episode#288中使用的代码。在Stripe令牌签出后提交表单时,会触发此CoffeeScript函数:
handleStripeResponse: (status, response) ->
if status == 200
$("#stripe_card_token").val(response.id)
$("#my_form_id")[0].submit()
else
# other stuff
由于javascript正在使用$("#my_form_id")[0].submit()
进行表单提交,因此name参数不会在commit params中继承。
我的解决方案是将“点击”属性添加到点击的按钮...
$('form_input[type=submit]').click ->
$('input[type=submit]', $(this).parents('form')).removeAttr('clicked')
$(this).attr('clicked', 'true')
..然后抓住点击按钮的id属性用它填充隐藏字段:
submitter = $("input[type=submit].clicked=true").attr("id")
我不是特别喜欢这个解决方案。感觉就像我的js知道太多了,我不喜欢依赖于js这类事情。任何批评或更好的解决方案当然是受欢迎的。)