18
votes

In my Rails 5 application a form's default submit button is disabled on submit to prevent an accidental double submit. Whenever the page is redirected after the submit or re-rendered with validation errors, the button is enabled again.

In my situation I have the controller send a zip file that I build in memory in the controller action using the following:

send_data zip.read, filename: "some_file.zip"

However, after serving the file the form is not re-enabled. I have to ctrl-F5 the page to reset the form and be able to make a different selection.

What is the rails way to do this?

3
It sounds like maybe you're using ajax, or UJS, to send this form?steel
The form is a normal form_tag not associated with a model. Normally a form submit renders a new page (or redirects) as a response. Here a file is served through send_data as a response but no page is reloaded, causing the submit_tag to stay disabled.ChrisDekker
@ChrisDekker ever found a solution for this? I have the same issue.Daniel

3 Answers

5
votes

I ran into a similar problem and resolved by using button_tag instead of submit_tag. This doesn't re-enable the form, but stops it from being disabled.

1
votes

Take a look at this approach for detecting download events with a combination of client and server: Detect when browser receives file download

0
votes

You can keep submit_tag being enabled by add append data: { disable_with: false }.

Or enable it after form submitted a few seconds?

 $("#my_form_id").submit(function(){
    setTimeout(() =>{
      
      // Enable submit button or enable all
      // $.rails.enableFormElements($($.rails.formSubmitSelector))
      $.rails.enableFormElement($("#my_form_id [type='submit']"))

    }, 3000)
  })