CloseTrace
Engineering

Form Submitting on Chrome But Not Safari? Here's the Fix

Your form works fine on Chrome but Safari users hit a wall. Here's why it happens, how to diagnose it fast, and the exact fixes that work.

CloseTrace Team · May 1, 2026 · 5 min read

Form Submitting on Chrome But Not Safari? Here's the Fix

You shipped a form. It works perfectly on your machine. Then a sales rep messages you: "Hey, the demo form is broken." You test it — works fine. They send a screenshot. They're on Safari. You open Safari. It breaks.

Welcome to one of the most maddening bugs in web development. The form submits cleanly on Chrome, Firefox, and Edge, but Safari users (desktop and mobile) get nothing — no submission, no error, no clue.

Here's what's actually happening, and how to find the root cause without spending three days on Stack Overflow.

Why Safari ghosts your form when Chrome doesn't

Safari is not "broken." It's stricter. Chrome has historically been more forgiving with malformed HTML, JavaScript timing, and edge-case event handling. Safari (and WebKit in general) tends to enforce specs more literally — which means the bug was probably always there, you just never saw it.

The five usual suspects:

1. requestSubmit() without a polyfill

If your form uses form.requestSubmit() to programmatically submit (common in Rails Hotwire, Stimulus, or any framework that wraps form submission), older Safari versions silently failed. The Hotwire community hit this exact issue — checkbox forms wired to requestSubmit() worked everywhere except Safari desktop, Safari mobile, and Chrome on iPad (which is just Safari in a costume — every iOS browser uses WebKit).

Safari added native support in version 16, but if you support older devices, you need the form-request-submit-polyfill. Frameworks like Turbo bundled it in 7.1+.

2. ITP (Intelligent Tracking Prevention) blocking your script

Safari's ITP aggressively blocks third-party cookies and storage. If your form depends on a third-party validation script, captcha, or analytics tag that sets a cookie before submission, Safari may block the request. Chrome's third-party cookie deprecation is gradual; Safari's has been brutal since 2017.

Check the Safari console for blocked storage warnings.

3. Date inputs with the wrong format

Safari is the strictest browser when it comes to <input type="date"> values. If your default value or min/max attribute is anything other than YYYY-MM-DD, Safari treats the field as invalid and blocks form submission with no visible error.

<!-- Breaks in Safari -->
<input type="date" value="01/15/2026">

<!-- Works -->
<input type="date" value="2026-01-15">

4. JavaScript that throws silently

Safari's older JS engine doesn't support every modern syntax feature on the same timeline as V8. A single optional chaining or top-level await in an old Safari version can throw an uncaught error, halt your event listener, and leave the submit button visually clickable but functionally dead.

5. Missing name attributes or button type

Safari is the browser most likely to bite you for sloppy markup. A submit button without type="submit", or form inputs missing name attributes, can cause unpredictable behavior. Stack Overflow users who hit this exact bug usually traced it back to invalid HTML that Chrome forgave and Safari didn't.

The diagnosis problem

Here's the part nobody talks about: you can read every checklist on the internet, but unless you can see exactly what the Safari user did, you're guessing. You don't know which field they were on when they clicked submit. You don't know if the button click event even fired. You don't know if a third-party script timed out. You don't know if it's Safari 17 or Safari 14 on an old iPad.

Cross-referencing console errors across users is impossible because you can't get into their browser.

This is exactly what session replay was built for.

Watch the Safari attempt next to the Chrome attempt

With CloseTrace's session recording, every form submission attempt is captured along with the browser, OS version, console errors, network calls, and the user's actual mouse and keyboard activity.

The workflow that takes 30 seconds:

  1. Filter sessions by browser = Safari, event = "form submit attempted, no success"
  2. Watch three or four recordings back-to-back
  3. Pull up a Chrome session of the same form for comparison

You'll see the divergence within seconds. Either a JS error fires only in Safari, a network request gets blocked, the date field shows a red border, or the submit button just sits there doing nothing while the user clicks it five more times in frustration.

The lead recovery layer also captures the form data the user typed before the failed submit. So even while you're fixing the Safari bug, you're not losing the leads — you can email them and follow up manually.

This is the same pattern that makes session replay valuable for any cross-browser bug: you stop guessing what users did and start watching it.

The fix order that saves you time

Don't try every fix at once. Work from highest probability to lowest:

  1. Open the form in Safari yourself with the dev console open. 80% of the time, an error message is already there.
  2. Validate the HTML with the W3C validator. Fix any unclosed tags, missing name attributes, or buttons without type="submit".
  3. Check date and number inputs for format compliance.
  4. Audit third-party scripts — captcha, analytics, A/B test snippets. Disable them one by one in Safari.
  5. If you use requestSubmit() or any modern Form API, add the polyfill.
  6. Replay 5+ Safari sessions to confirm the fix worked across iOS versions, not just your test device.

The takeaway

"Works on Chrome, broken on Safari" is almost never a Safari bug. It's a spec-strictness gap that exposes something fragile in your code. The fastest path to the fix is watching real Safari users hit the wall — not reproducing it on your laptop and hoping you've matched their setup.

If your form is your highest-converting asset, every Safari user who silently bails is revenue you'll never see in your analytics. Add session replay to one site, filter by browser, and you'll have the answer before lunch.