如何禁用表单提交按钮“a là Ruby on Rails Way”?

问题描述 投票:0回答:2

我正在使用 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 %>

我怎样才能以“常见”/“好”/“正确”的方式做到这一点?

ruby-on-rails ruby ajax ruby-on-rails-3 forms
2个回答
47
投票

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 时,将减少一个需要修复的弃用通知。:)


0
投票

在 Rails 7 之后,默认情况下不再启用库 @rails/ujs。 所以

:disable_with
没有集成。

从 Rails 7 开始,默认安装 Turbo,它应该可以防止重复提交。

我的情况,我遇到这个问题是因为我有

= form_with model:, url:, data: { turbo: false } do |form|`

删除

data: { turbo: false }
解决了问题。

© www.soinside.com 2019 - 2024. All rights reserved.