问题 Rails没有传递“commit”按钮参数


在新服务器上重新安装Rails应用程序。应用程序的一部分可以根据用户选择的按钮分叉两个方向之一。这部分不起作用,当我查看日志时,我看到了我给表单的值, execept 为了 commit params hash的一部分。这似乎是应用程序没有按预期工作的原因(因为没有任何内容 params[:commit],但我不知道为什么不会传递提交;请求肯定是一个POST请求,所有其他参数都在那里。


7593
2018-01-04 15:11


起源

你找到了解决方案吗?我有一个类似的问题,因为我用我的网页设计师更新了我的模板。使用'基本'模板,所有都是文件,但使用设计器(HTML有效)模板,我没有得到提交值。 - Mike Sutton
在我的情况下,这是因为在实际提交表单之前有一个jQuery弹出窗口。 - Wayne Molina
感谢Wayne的评论,这让我知道是什么导致了这一点。在我的例子中,我们有一个通用的jQuery提交事件绑定,它禁用了提交按钮(以避免双重提交)。从这个表单中删除固定的东西。 - chrisrbailey
我有类似的东西:如果你使用submit_tag的disable_with功能,它不会传递“commit”参数。 - Chicagogrrl
欢呼@chrisbailey,我正在听取点击提交按钮,禁用各种东西并显示加载throbbers然后做一个jQuery .submit() 。我不得不保留那些代码,所以不要去听 click 在按钮上,我现在听着 submit 在表格上 $("#my-form").submit(function(e){....code goes here...}) 而且我不需要做手册 .submit() (注意我正在进行手动提交,因为当侦听点击提交按钮时,chrome阻止了默认行为FF不会阻止它。) - ryan2johnson9


答案:


有一个禁用按钮提交功能的类似问题。我们通过在提交表单之前添加具有相同名称和值的隐藏输入字段来解决它。

function disableButtonAndSubmit()
{
  var input = $("<input type='hidden' />").attr("name", $(this)[0].name).attr("value", $(this)[0].value);
  $(this).closest('form').append(input);
  $(this).attr('disabled', 'disabled').html('Loading…');
  $(this).closest('form').submit();
}

$('#somewhere button').click(disableButtonAndSubmit);

7
2018-04-30 07:52





只需添加 name: "commit", value: "Save"到您的表单提交按钮:

form_for @object do |f|
  ...
  f.button :submit, "Save", name: "commit", value:"Save"
end

然后你会有 params[:commit] 等于 "Save" 在控制器中。


5
2018-06-29 21:45





我遇到了同样的问题,这里的答案指出了我正确的方向。但是,不是建议添加隐藏的表单输入或放弃双提交块,您只需在双提交块上添加一个setTimeout函数,超时为1毫秒,这样可以使双提交块无需阻止提交按钮。


2
2018-06-07 03:31



那只是我需要的解决方案。谢谢! - Tyler Rick


检查您的提交输入是否已命名为commit,否则将不会发送其标签。

生成的html应为:

<input type="submit" name="commit" label="...>

1
2018-01-04 16:31





我之前看过这样的事情,不同的浏览器如何传递表单上的提交按钮的值是不一致的。我发现唯一可行的解​​决方案是在按钮中设置一个隐藏字段的javascript,然后使用该值。

以下是我的一些代码,用于区分保存和退出,这是一种方式,另一种是保存和继续:

  <%= hidden_field_tag 'step_commit', '' %>
  <span style="float:left;">
    <%=submit_tag 'Cancel', :name=>'cancel', :onclick=>"javascript:location.href='/';return false;" %>
    <%=submit_tag 'Save and Exit', :name=>'exit', :onclick=>"javascript:$('step_commit').value='exit';" %>
  </span>
  <span style="float:right;">
    <%=submit_tag 'Save and Continue', :name=>'continue', :onclick=>"javascript:$('step_commit').value='continue';" %>
  </span>

0
2018-01-04 16:28



奇怪的是它在旧服务器上工作正常,但我们现在只是移动了它并停止了。 - Wayne Molina