Redundant Entry
Information previously entered by the user in the same process is auto-populated or available to select, unless re-entry is essential, the information is security-sensitive, or the earlier value is no longer valid.
Who this affects
Users with cognitive disabilities who must hold a value in working memory across steps. Users with motor disabilities for whom every keystroke costs effort. Typing an address twice in a checkout is the standard failure.
The failure and the fix
Each example below is a self-contained page, loaded in a frame so its markup cannot affect this page. Open either one on its own to test it with a keyboard or screen reader.
Fails 3.3.7
Open the failing example in a new tab
fail.html — the problem
<h1>Checkout</h1>
<div class="step">
<h2>Step 1: Delivery address</h2>
<div class="field">
<label for="d-name">Full name</label>
<input type="text" id="d-name" autocomplete="name">
</div>
<div class="field">
<label for="d-addr">Address</label>
<input type="text" id="d-addr" autocomplete="street-address">
</div>
</div>
<!-- FAILURE 1: the same address is asked for a second time in the same process,
with no way to reuse what was already entered. For a user with a memory or
motor disability this doubles the cost of the task and doubles the chance
of a mismatch that fails validation later. -->
<div class="step">
<h2>Step 2: Billing address</h2>
<div class="field">
<label for="b-name">Full name</label>
<input type="text" id="b-name">
</div>
<div class="field">
<label for="b-addr">Address</label>
<input type="text" id="b-addr">
</div>
</div>
<!-- FAILURE 2: information the user already gave, asked again at the end. -->
<div class="step">
<h2>Step 3: Confirm</h2>
<div class="field">
<label for="c-email">Re-enter your email address</label>
<input type="email" id="c-email">
</div>
</div>
Meets 3.3.7
Open the passing example in a new tab
pass.html — the fix
<h1>Checkout</h1>
<div class="step">
<h2>Step 1: Delivery address</h2>
<div class="field">
<label for="d-name">Full name</label>
<input type="text" id="d-name" autocomplete="name" value="A. Marsh">
</div>
<div class="field">
<label for="d-addr">Address</label>
<input type="text" id="d-addr" autocomplete="street-address" value="12 River Street">
</div>
</div>
<!-- FIX 1: offer the earlier answer instead of asking for it again. The
checkbox is checked by default because "same as delivery" is the common
case, and the fields stay available for the minority who need to change
them - so nobody is locked out either way. -->
<div class="step">
<h2>Step 2: Billing address</h2>
<p class="field">
<input type="checkbox" id="same" checked onchange="syncBilling()">
<label for="same">Same as my delivery address</label>
</p>
<div id="billing-fields" hidden>
<div class="field">
<label for="b-name">Full name</label>
<input type="text" id="b-name" autocomplete="billing name">
</div>
<div class="field">
<label for="b-addr">Address</label>
<input type="text" id="b-addr" autocomplete="billing street-address">
</div>
</div>
</div>
<!-- FIX 2: show what was entered rather than asking for it again, with a link
to change it. -->
<div class="step">
<h2>Step 3: Confirm</h2>
<p>Email address: <strong>a.marsh@example.org</strong>
<a href="#step1">Change your email address</a></p>
</div>
<!-- Note the exceptions 3.3.7 allows: re-entry IS permitted when it is
essential (confirming a new password), when the information is
security-sensitive, or when the earlier value is no longer valid.
"It is easier for us to build" is not among them. -->
<p id="step1">Step 1.</p>
How to test it
Walk a multi-step process and note anything asked for twice. A shipping address repeated as a billing address must offer a Same as shipping option or be pre-filled. Password confirmation is an allowed exception.
-
Automated
Requires walking a multi-step process and tracking what is asked more than once.
No axe rule maps to this criterion. It has to be checked by a person.
-
Keyboard
Unplug the mouse. Move through the page with Tab, Shift+Tab, Enter, Space and the arrow keys. See the keyboard testing script.
-
Screen reader
Listen to both examples with NVDA, JAWS, VoiceOver or TalkBack and compare what is announced. See the screen reader cheat sheets.
-
Visual
Zoom to 200% and 400%, narrow the viewport to 320 px, and apply the text-spacing overrides. See the visual testing procedures.
Related criteria
In the specification
- Understanding 3.3.7 Redundant Entry — the W3C explanation, intent and exceptions
- 3.3.7 in the WCAG 2.2 Recommendation — the normative wording
WCAG 2.2 Demo Suite