Skip to main content
← πŸ“„ HTML & the platformΒ·Module A3 Β· Lesson 19
TaskBuild a checkout form. Inputs: name (required), card (required). Add a JS formdata listener that appends 'client_ts' = String(Date.now()) and 'tz' = Intl.DateTimeFormat().resolvedOptions().timeZone to the outgoing FormData.

The formdata event: edit submissions before they leave

100 XP8 min
Theory

A modern API you probably haven't used

The browser fires a formdata event after the user clicks submit but before the request is sent. The handler gets a live FormData it can edit:

form.addEventListener("formdata", (e) => {
  e.formData.append("client_ts", Date.now());
  e.formData.delete("internal_only_field");
});

That payload is what actually hits your server. No hidden inputs, no JS submit-wrap, no breaking accessibility.

What it's good for

  • Add client-derived metadata β€” timestamps, timezone offset, screen size, A/B variant β€” without polluting the visible form.
  • Strip helper fields β€” a "confirm password" field is for UX; the server shouldn't get it.
  • Normalize values β€” trim whitespace, lowercase emails, format phone numbers β€” without rewriting the user's input visually.

Why this beats hidden inputs

A hidden input is in the DOM, so:

  • Form-fill extensions can read or alter it.
  • The user-agent's autofill may overwrite it.
  • If you set its value via JS later, you have to remember to update it on every change.

formdata runs once at submit time, with the freshest values. The form HTML stays clean.

Browser support

Chrome 78+, Firefox 72+, Safari 14.5+. If you support anything older, you fall back to listening for submit with e.preventDefault(), building your own FormData, and fetch()-ing it manually β€” much messier.

πŸ”’

Sign up to start coding

Theory is open to everyone. The interactive editor, live preview, and check are unlocked with a 7-day free trial β€” card required, cancel anytime.

Sign up β€” free trial β†’

First 10 lessons in each track are free. No card needed for those.

← PreviousNext lesson β†’

Get one Python or web tip a day β€” by email

Short, hand-written, no spam. Unsubscribe in one click.