Error Prevention (Legal, Financial, Data)
For pages causing legal commitments or financial transactions, modifying user-controllable data, or submitting test responses, submissions are reversible, checked and correctable, or confirmed before finalising.
Who this affects
Users with cognitive and motor disabilities, for whom an accidental irreversible action carries real financial or legal cost. A one-click Delete Account with no confirmation is the archetypal 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.4
Open the failing example in a new tab
fail.html — the problem
<h1>Confirm your order</h1>
<!-- FAILURE 1: a financial transaction committed in one click, with no review
step, no confirmation, and no way to reverse it. The user cannot check
what they are about to buy or correct a mistake before it costs money. -->
<p>Total: £48.97</p>
<button type="button" class="button" onclick="pay()">Pay now</button>
<!-- FAILURE 2: an irreversible data deletion with no confirmation. -->
<h2>Account</h2>
<button type="button" class="button" onclick="wipe()">Delete all my order history</button>
<!-- FAILURE 3: a legal commitment accepted implicitly, with the terms not
shown and no explicit act of agreement. -->
<p><small>By pressing Pay now you agree to our terms of sale.</small></p>
<p id="log" role="status"></p>
Meets 3.3.4
Open the passing example in a new tab
pass.html — the fix
<h1>Confirm your order</h1>
<!-- FIX 1 — CHECKED AND CORRECTABLE: everything the user is committing to is
shown, itemised, with a way to change each part before paying. -->
<div class="review">
<h2>What you are ordering</h2>
<table>
<caption>Order summary</caption>
<thead><tr><th scope="col">Item</th><th scope="col">Qty</th><th scope="col">Price</th></tr></thead>
<tbody>
<tr><th scope="row">Tidal Flats</th><td>1</td><td>£12.99</td></tr>
<tr><th scope="row">The Long Field</th><td>2</td><td>£35.98</td></tr>
</tbody>
</table>
<p><strong>Total: £48.97</strong></p>
<p><a href="#basket">Change your basket</a> · <a href="#addr">Change delivery address</a></p>
</div>
<!-- FIX 2 — CONFIRMED: an explicit act of agreement, with the terms reachable
before agreeing rather than referenced after the fact. -->
<p class="field">
<input type="checkbox" id="agree">
<label for="agree">I agree to the <a href="#terms">terms of sale</a></label>
</p>
<button type="button" class="button" onclick="review()">Review and pay</button>
<!-- FIX 3 — REVERSIBLE, and confirmed before the fact. Destructive actions get
a confirmation naming exactly what will be lost. -->
<h2>Account</h2>
<button type="button" class="button button--secondary" onclick="askWipe()">Delete all my order history</button>
<div id="confirm" hidden>
<p><strong>Delete 14 orders going back to 2019?</strong>
You will not be able to recover them, and you will lose your purchase history
for warranty claims.</p>
<button type="button" class="button" onclick="doWipe()">Yes, delete 14 orders</button>
<button type="button" class="button button--secondary" onclick="cancelWipe()">Keep my order history</button>
</div>
<p id="log" role="status"></p>
<h2 id="basket">Your basket</h2>
<p>2 titles, 3 items.</p>
<h2 id="addr">Delivery address</h2>
<p>12 River Street, Riverside.</p>
<h2 id="terms">Terms of sale</h2>
<p>Goods are sold subject to availability. Returns accepted within 30 days.</p>
<!-- 3.3.4 is satisfied by ANY ONE of three routes:
REVERSIBLE - the submission can be undone (a cancellation window)
CHECKED - data is validated and the user can correct it
CONFIRMED - a review step with an explicit opportunity to confirm
It applies to pages that create a legal commitment, take a financial
transaction, modify or delete user-controllable data, or submit test
responses. At AAA, 3.3.6 extends the same protection to EVERY form. -->
How to test it
Identify consequential actions — purchases, contract acceptance, account deletion, data overwrites. Each needs at least one of: reversibility, validation with a chance to correct, or a review-and-confirm step.
-
Automated
Requires walking the transactional flows to the point of commitment.
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.4 Error Prevention (Legal, Financial, Data) — the W3C explanation, intent and exceptions
- 3.3.4 in the WCAG 2.2 Recommendation — the normative wording
WCAG 2.2 Demo Suite