Skip to content

Instantly share code, notes, and snippets.

@bjo3rnf
Last active June 14, 2022 17:41
Show Gist options
  • Star 1 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save bjo3rnf/1bdcd70363b12001f3517d8b381c39cb to your computer and use it in GitHub Desktop.
Save bjo3rnf/1bdcd70363b12001f3517d8b381c39cb to your computer and use it in GitHub Desktop.
Stimulus.js controller to debounce form submissions
<form method="post" data-controller="form-debounce" data-action="submit->form-debounce#debounce" data-form-debounce-is-submitting-class="submitting">
[...]
<button type="submit" data-form-debounce-target="submitButton">
Submit once
</button>
</form>
import { Controller } from 'stimulus'
export default class extends Controller {
static classes = [ 'isSubmitting' ]
static targets = [ 'submitButton' ]
static values = { isSubmitting: Boolean }
debounce (e) {
if (true === this.isSubmittingValue) {
e.preventDefault()
e.stopPropagation()
return false
}
this.isSubmittingValue = true
if (this.hasIsSubmittingClass) {
this.element.classList.add(this.isSubmittingClass)
}
if (this.hasSubmitButtonTarget) {
this.submitButtonTarget.setAttribute('disabled', 'disabled')
}
}
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment