3.3.4 Error Prevention (Legal, Financial, Data)

Level: AA | Principle: Understandable | Since: WCAG 2.0 | Automation: Manual


What This Means

For pages that cause legal commitments, financial transactions, or modify/delete user-controlled data, at least one of the following must be true: submissions are reversible, data is verified before final submission, or a confirmation step allows the user to review and correct before committing.

Who This Affects

  1. Cognitive disability users — they are more likely to make input errors and need the ability to review and correct before a binding action
  2. Screen reader users — they may accidentally submit a form when they cannot visually scan all fields at once; a confirmation step lets them verify
  3. Motor impairment users — accidental clicks or keystrokes can trigger irreversible submissions
  4. Everyone — confirmation steps prevent costly mistakes in financial and legal transactions

Common Pitfalls

1. One-click purchase with no review

<!-- Bad: single button completes the purchase -->
<button onclick="processPayment()">Buy Now — $499</button>

<!-- Good: takes user to a review page first -->
<button onclick="goToReview()">Proceed to Review</button>

2. Permanent data deletion with no undo

<!-- Bad: immediately deletes with no confirmation -->
<button onclick="deleteAccount()">Delete Account</button>

<!-- Good: confirmation dialog before destructive action -->
<button onclick="showDeleteConfirmation()">Delete Account</button>

<dialog id="confirm-delete" aria-labelledby="confirm-heading">
  <h2 id="confirm-heading">Delete your account?</h2>
  <p>This will permanently remove all your data. This action cannot be undone.</p>
  <button onclick="deleteAccount()">Yes, delete my account</button>
  <button onclick="closeDialog()">Cancel</button>
</dialog>

3. No way to review form data before legal submission

<!-- Bad: single-page form that submits a contract -->
<form onsubmit="submitContract()">
  <input name="name" placeholder="Full legal name">
  <input name="ssn" placeholder="Social Security Number">
  <textarea name="terms">I agree to...</textarea>
  <button type="submit">Sign Contract</button>
</form>

How to Fix

Provide a review/confirmation step

<!-- Step 1: Fill in order details -->
<form action="/review" method="post">
  <label for="item">Item</label>
  <input id="item" name="item" value="Laptop Pro 16">

  <label for="qty">Quantity</label>
  <input id="qty" name="qty" type="number" value="1">

  <button type="submit">Review Order</button>
</form>

<!-- Step 2: Review before final submission -->
<h2>Review Your Order</h2>
<dl>
  <dt>Item</dt><dd>Laptop Pro 16</dd>
  <dt>Quantity</dt><dd>1</dd>
  <dt>Total</dt><dd>$1,499.00</dd>
</dl>
<form action="/confirm" method="post">
  <button type="submit">Confirm Purchase</button>
  <a href="/cart">Go Back and Edit</a>
</form>

Make submissions reversible

<!-- After deletion, provide an undo window -->
<div role="alert">
  <p>Project "Master Sword" deleted.</p>
  <button onclick="undoDelete()">Undo (available for 30 seconds)</button>
</div>

Verify data before submission

<form onsubmit="return validateBeforeSubmit()">
  <label for="email">Email</label>
  <input id="email" type="email" name="email" required>

  <label for="email-confirm">Confirm Email</label>
  <input id="email-confirm" type="email" name="email_confirm" required>

  <button type="submit">Submit Application</button>
</form>

<script>
function validateBeforeSubmit() {
  const email = document.getElementById('email').value;
  const confirm = document.getElementById('email-confirm').value;
  if (email !== confirm) {
    alert('Email addresses do not match. Please correct before submitting.');
    return false;
  }
  return true;
}
</script>

How to Test

  1. Identify all pages involving financial transactions, legal agreements, or user data modification/deletion.
  2. Walk through each flow (purchase, contract signing, account deletion, data update) and verify at least one safeguard: a review/confirmation step, the ability to undo/reverse the action, or data verification before final submission.
  3. For financial transactions, confirm there is a review page showing the order summary before the final "Confirm" button.
  4. For data deletion, verify a confirmation dialog appears requiring explicit acknowledgment.
  5. Pass: Every legal, financial, or data-modifying action has a review step, undo mechanism, or verification check before finalization.
  6. Fail: Any legal commitment, financial transaction, or data deletion executes immediately with no confirmation, review, or undo option.

axe-core Rules

This criterion cannot be detected by automated tools. It requires understanding of the business context (legal, financial, data modification) and evaluating whether appropriate safeguards are in place.

Sources

  1. W3C WCAG 2.2 — Understanding 3.3.4
  2. W3C Technique G98: Providing the ability to review and correct before submitting
  3. W3C Technique G99: Providing the ability to recover deleted information
  4. W3C Technique G168: Requesting confirmation to continue