How to prevent buttons from causing a form to submit with HTML
https://gomakethings.com/how-to-prevent-buttons-from-causing-a-form-to-submit-with-html/
By default, a button
has an innate type
property of submit
. When tapped, clicked, or activated inside a form, it will cause that form to submit (and trigger a corresponding submit
event).
<form id="say-hi">
<button>Activate Me</button>
</form>
let form = document.querySelector("#say-hi");
form.addEventListener("submit", function () {
console.log("Someone said hi!");
});
Every now and then, you have a button inside a form that’s used for some other interaction, and should not cause the form to submit.
I often see people use JavaScript to detect those buttons, and run event.preventDefault()
to stop the default form submit behavior from running. I used to be one of those people.
<form id="say-hi">
<button>Activate Me</button>
<button id="toggle-something">Toggle Something</button>
</form>
form.addEventListener("submit", function (event) {
// Ignore the #toggle-something button
if (event.submitter.matches("#toggle-something")) {
event.preventDefault();
}
console.log("Someone said hi!");
});
A while back, though, my friend Eric Bailey taught me a much simpler way to handle this: add type="button"
to the button.
<form id="say-hi">
<button>Activate Me</button>
<button id="toggle-something" type="button">Toggle Something</button>
</form>
Now, clicking, tapping, or otherwise activating the #toggle-something
button will not cause a submit
event to run.