使用向导表单中的按钮提交值的最佳方法

时间:2015-02-20 15:20:15

标签: javascript ruby-on-rails

我一直在尝试创建一个基本上是一系列是或否问题的向导表单。表格中还有几页,用户在继续之前必须选择多个选项。

现在所有的对象参数都是布尔值,但我见过的所有向导示例都涉及基本形式(text_fields,check_box等)。

我想我可能会做这样的事情:

<div class="button1">
    <%= f.hidden_field :newsletter, value: "1" %>
    <%= f.submit "Yes" %>
</div>

<div class="button2">
    <%= f.hidden_field :newsletter, value: "0" %>
    <%= f.submit "No" %>
</div>

但它似乎没有保存价值。 我正在使用邪恶的宝石作为向导,并且正在关注this RailsCast tutorial

注意:像text_fields这样的普通字段会保存,而不是这些按钮布尔值。

2 个答案:

答案 0 :(得分:0)

这些按钮和隐藏字段都采用相同的形式。因此,任何一个按钮都会提交表单,当表单提交时,它会将所有字段的值收集到params中。

你可以做的是将按钮本身变成输入,通过参数发送。这与“name”和“value”属性一样,与任何其他属性一样:

<input type="submit" value="foo" name="bar" />
<input type="submit" value="chunky" name="bacon" />

现在,如果您使用第一个按钮提交,则会在参数中获得:bar => "foo",如果您使用第二个按钮提交,则会获得:bacon => "chunky"

传统名称是“提交”。使用rails submit_tag时,它会将“name”设置为“commit”,并将“value”设置为按钮的文本。因此,您应该在参数中看到:commit => "Yes":commit => "No",并相应地更改您的逻辑。

答案 1 :(得分:0)

最好使用jQuery触发事件并相应地添加隐藏的输入

<div class="button1">
  <%= f.submit "Yes", class: "wizard-btn" %>
</div>

<div class="button2">
  <%= f.submit "No", class: "wizard-btn" %>
</div>
... ...

示例coffeescript代码如下所示:

jQuery ->
  $(".wizard-btn").on "click", (e) ->
    e.preventDefault()
    thisForm = $(".wizard-form")
    hideDiv = "<input type=\"hidden\" name=\"newsletter\" />"
    if $(this).val() == "Yes"
      thisForm.append $(hideDiv).val("1")
    else if $(this).val() == "No"
      thisForm.append $(hideDiv).val("0")
    thisForm.get(0).submit()

我假设你的表单有一个名为wizard-form

的类