Skip to content
easeweb
Search topics

Checkout forms that ask for the same address twice

A two-step checkout takes the delivery address, then asks for it again as the billing address, with every field empty and nothing to reuse what was just typed.

WCAG 2.2
SC 3.3.7A· new in 2.2
Required by
Not required by Section 508 or EN 301 549
Broken
The accessibility problem illustrated: Typed at step 1. Typed again at step 2.
01

The problem

People for whom typing is slow, tiring or error-prone have to type an address they gave a minute ago, again, from memory.

02

Try it

Keep the delivery address or change it, then choose Continue to payment.

On the payment step, look at what the billing address asks of you. The panel under the form counts the lines you would type again.

Broken Can you fix this?

1. Delivery

A recreated demo. The broken version is intentionally inaccessible.

03

The fix

Reuse what people already gave: a ticked same-as box, or the fields filled in.

  1. 1Never leave a field empty for a value given earlier in the same process.
  2. 2Reuse it with a ticked same-as box, fill it in, or at the least show it on the same page.
  3. 3Never block paste, and keep entered values after going back and after an error.
Before The billing address asked again, empty
<!-- Step 2 of 2: Payment --><fieldset>  <legend>Billing address</legend>  <label for="bill-name">Full name</label>  <input id="bill-name" name="bill-name" autocomplete="billing name">  <label for="bill-street">Street address</label>  <input id="bill-street" name="bill-street" autocomplete="billing street-address">  <label for="bill-postcode">Postcode</label>  <input id="bill-postcode" name="bill-postcode" autocomplete="billing postal-code"></fieldset>
After

A same-as-delivery checkbox, ticked by default

<label>  <input type="checkbox" id="billing-same" name="billing-same" checked    aria-describedby="delivery-address">  Billing address is the same as delivery address</label><p id="delivery-address">Sam Rivera, 12 Elm Street, AB1 2CD</p><fieldset id="billing" hidden disabled>  <legend>Billing address</legend>  <label for="bill-name">Full name</label>  <input id="bill-name" name="bill-name" autocomplete="billing name">  <label for="bill-street">Street address</label>  <input id="bill-street" name="bill-street" autocomplete="billing street-address">  <label for="bill-postcode">Postcode</label>  <input id="bill-postcode" name="bill-postcode" autocomplete="billing postal-code"></fieldset>

Fixing this with an AI coding assistant? Get this guide as Markdown

04

Verify the fix

6 checks, no mouse.

Test with: Keyboard, Screen reader, Touch

0 of 6 checked

Record the OS, browser and assistive-technology versions, the build, the date, and the actual result of each step. Repeat after the checkout's steps or its shared form components change.

Limits

This is a starting pattern, not a guarantee for every process. The example is a two-step checkout; sign-up flows, bookings and applications need the same walk-through, step by step. Payment fields inside a provider's frame are the provider's to fix, but the page around them is yours. The criterion doesn't require remembering details between visits, and saved addresses are a separate feature with their own privacy questions. Test the complete process with the people and tools your users rely on.

This is a recreated teaching example, not a finding about a named client. The code is a starting pattern: test it in your own product. No completed assistive-technology test is claimed here.

Keep this fixed as your code changes.

Turn guides like this into rules your coding agents and CI follow, then have the result retested with a keyboard and screen readers.

How retests work