关于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)
  })


以上是关于javascript:Rails 5 Re-enable form submit after success send_data的全部内容。
THE END
分享
二维码
< <上一篇
下一篇>>