我正在使用 Ruby on Rails 3,我想禁用和toogle form.submit
的 CSS 类当表单以 AJAX 提交时,直到 AJAX HTTP 请求完成(我使用的是默认值) JavaScript 的 jQuery 框架)。
我的表格如下:
<%= form_for(@article, :remote => true) do |form| %>
...
<%= form.submit(nil, {:id => 'button_id', :class => 'button_class'}) %>
<% end %>
我怎样才能以“常见”/“好”/“正确”的方式做到这一点?
Rails jQuery 桥 (jquery_ujs.js) 代码实际上为此提供了一个帮助程序。
<%= form.submit "Save", id: "button_id", class: "button", disable_with: "Submitting..."
它将用您提供的值替换按钮文本。
参见 http://api.rubyonrails.org/classes/ActionView/Helpers/FormTagHelper.html#method-i-submit_tag
API 更改: 正如 Renan 在下面的评论中建议的那样,从 Rails 4 beta 开始,
disable_with
选项有一个弃用通知。应该改为数据属性:
<%= form.submit "Save", id: "button_id", class: "button", data: {disable_with: "Submitting..."} %>
这应该适用于所有最新版本的 Rails,因为无论如何,这就是该选项的作用。因此,当您升级到 Rails 4 时,将减少一个需要修复的弃用通知。:)
在 Rails 7 之后,默认情况下不再启用库 @rails/ujs。 所以
:disable_with
没有集成。
从 Rails 7 开始,默认安装 Turbo,它应该可以防止重复提交。
我的情况,我遇到这个问题是因为我有
= form_with model:, url:, data: { turbo: false } do |form|`
删除
data: { turbo: false }
解决了问题。