关于javascript:Rails 5 Re-enable form submit after success send_data
Rails 5 Re-enable form submit after successful send_data
在我的 Rails 5 应用程序中,表单的默认提交按钮在提交时被禁用,以防止意外的重复提交。每当页面在提交后被重定向或重新呈现时出现验证错误,按钮就会再次启用。
在我的情况下,我让控制器发送一个 zip 文件,我在控制器操作中使用以下内容在内存中构建该文件:
send_data zip.read, filename:"some_file.zip"
但是,在提供文件后,表单并未重新启用。我必须按 ctrl-F5 页面来重置表单并能够做出不同的选择。
rails 的方法是什么?
相关讨论
- 听起来您可能正在使用 ajax 或 UJS 来发送此表单?
- 该表单是与模型无关的普通 form_tag。通常,表单提交会呈现一个新页面(或重定向)作为响应。这里通过 send_data 提供一个文件作为响应,但没有重新加载页面,导致 submit_tag 保持禁用状态。
- @ChrisDekker 有没有找到解决方案?我有同样的问题。
我遇到了类似的问题,并通过使用 button_tag 而不是 submit_tag 解决了。这不会重新启用表单,但会阻止它被禁用。
相关讨论
- 你能举个例子吗?你从中得到了什么行为?对我来说,当文件给出响应时,问题似乎是在客户端捕获事件。我真的不明白使用 button_tag 有什么帮助。
- 这是因为 button_tag 根本没有触发禁用,这对于您的用例来说可能是可以接受的。它根本不会阻止双击。我遇到的问题有点不同 - 我的表单是 target="_blank",但由于它不会导致任何后端更改,所以如果双击我的表单就不是问题。
看看这种结合客户端和服务器来检测下载事件的方法:
检测浏览器何时接收文件下载
您可以通过添加附加 data: { disable_with: false }.
来保持启用 submit_tag
或者在表单提交几秒钟后启用它?
|
1
2 3 4 5 6 7 8 9 |
$("#my_form_id").submit(function(){
setTimeout(() =>{ // Enable submit button or enable all // $.rails.enableFormElements($($.rails.formSubmitSelector)) $.rails.enableFormElement($("#my_form_id [type='submit']")) }, 3000) |
THE END
二维码