Skip to content

Instantly share code, notes, and snippets.

@glaucocustodio
Created October 23, 2025 14:13
Show Gist options
  • Select an option

  • Save glaucocustodio/284d39da70cca3aa3b583cd9a3137289 to your computer and use it in GitHub Desktop.

Select an option

Save glaucocustodio/284d39da70cca3aa3b583cd9a3137289 to your computer and use it in GitHub Desktop.
Disable the submit button of a form (for turbo powered submits)
import { Controller } from "@hotwired/stimulus"
/*
Example usage:
<div data-controller="form-submit-disabler" data-form-submit-disabler-disable-with-value="Creating..."
<form data-form-submit-disabler-target="form">
<button data-form-submit-disabler-target="submitButton">Create</button>
</form>
</div>
*/
export default class extends Controller {
static targets = ["form", "submitButton"]
static values = {
disableWith: { type: String, default: "Submitting..." }
}
connect() {
this.formTarget.addEventListener("turbo:submit-start", this.#disableSubmitButton)
this.formTarget.addEventListener("turbo:submit-end", this.#enableSubmitButton)
}
disconnect() {
this.formTarget.removeEventListener("turbo:submit-start", this.#disableSubmitButton)
this.formTarget.removeEventListener("turbo:submit-end", this.#enableSubmitButton)
}
#disableSubmitButton = () => {
if (this.hasSubmitButtonTarget) {
this.submitButtonTarget.disabled = true
this.originalSubmitButtonText = this.submitButtonTarget.textContent
this.submitButtonTarget.classList.add("Polaris-Button--disabled");
this.submitButtonTarget.textContent = this.disableWithValue
}
}
#enableSubmitButton = () => {
if (this.hasSubmitButtonTarget) {
this.submitButtonTarget.disabled = false
this.submitButtonTarget.classList.remove("Polaris-Button--disabled");
this.submitButtonTarget.textContent = this.originalSubmitButtonText
}
}
}
@glaucocustodio
Copy link
Author

the class Polaris-Button--disabled is added because this controller was created to work with Polaris ViewComponents, replace it with whatever makes sense for you.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment