1

我正在尝试设置一个带有多个提交操作的表单,以及 Railscast #38。在 Formtastic 中相当于什么?

<%= submit_tag 'Create' %>
<%= submit_tag 'Preview', :name => 'preview_button' %>

这篇文章给了我希望,但它看起来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...' } %>
4

1 回答 1

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 参数将不会在提交参数中进行传递。

我的解决方案是为被点击的按钮添加一个“点击”属性......

$('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做这种事情。当然欢迎任何批评或更好的解决方案:)

于 2012-12-16T21:05:09.413 回答