DEV Community

Soren Sterling
Soren Sterling

Posted on

Why does my Cancel button submit the form?

Here's something that's easy to miss when working with HTML forms.

Say you have a form with two buttons:

<form>
  <input type="text" name="username">

  <button>Cancel</button>
  <button>Save</button>
</form>
Enter fullscreen mode Exit fullscreen mode

Looks fine, right?

But clicking "Cancel" will also try to submit the form.

That's because a <button> inside a form defaults to type="submit" when you don't specify a type.

It doesn't matter what text is inside the button. The browser doesn't know that "Cancel" is supposed to cancel something.

The fix is just to be explicit:

<form>
  <input type="text" name="username">

  <button type="button">Cancel</button>
  <button type="submit">Save</button>
</form>
Enter fullscreen mode Exit fullscreen mode

Now the Cancel button won't submit the form. You can attach your own JavaScript to it, like closing a modal or going back to another page.

There's also type="reset", but that's different. It restores form fields to their initial values, which isn't necessarily what you want from a Cancel button.

One other thing: this behavior isn't limited to buttons physically inside a <form>. A button outside the form can still be associated with it using the form attribute.

So if a form is submitting when you click something that shouldn't submit it, checking the button's type is a good place to start.

I usually prefer writing type="button" or type="submit" explicitly, even when the default would work. It's one less thing to think about later.

Top comments (0)