我的 Rails 应用程序中有一个表单,但多次单击时会提交多次。我想确保在检查所有验证时表单仅提交一次。我尝试在单击时禁用按钮,但它仅禁用按钮而不发送数据或检查验证。
请帮助我。预先感谢。
您可以使用 ClientSideValidation gem 来检查字段是否有效(它使用模型验证规则)。
在所有字段都有效之前,您的表格才会发送。
您可以使用 if 或 except 条件来完成
<%unless object.new_record?%>
<%=f.submit "save",:diabled=>'true'%>
<%end%>
ClientSideValidation gem 具有可用于启用/禁用提交按钮的回调。 https://github.com/DavyJonesLocker/client_side_validations#callbacks
// You will need to require 'jquery-ui' for this to work
window.ClientSideValidations.callbacks.form.fail = function(form, message, callback) {
form.find('#submit-button').prop('disabled', true)
}
window.ClientSideValidations.callbacks.form.pass = function(element, callback) {
form.find('#submit-button').prop('disabled', false)
}
Rails 有一个内置的
disable_with
方法,您可以在链接和按钮上使用它。所以你可以这样做:button_tag "Checkout", data: { disable_with: "Please wait..." }
。一旦您的按钮被单击一次,该按钮将被禁用(并且不再有数据发送到您的控制器),并且按钮上的文本将被替换为“请稍候...”。