Level A Operable WCAG 2.5.2

What This Criterion Requires

WCAG 2.5.2 requires that for functionality triggered by single pointer input, at least one of the following is true: the down-event is not used to execute any part of the function; the function is executed on the up-event and a mechanism is available to abort or undo the function; the up-event reverses any outcome of the preceding down-event; or completing the function on the down-event is essential. This criterion ensures users can recover from accidental pointer activation. When a function triggers on mousedown or touchstart (the down-event), users have no opportunity to cancel the action by moving their pointer away before releasing. Standard browser behavior triggers click events on the up-event (mouseup or touchend), which naturally provides cancellation: if a user presses down on a button but realizes it is wrong, they can move their pointer away and release, and the click does not fire. Using mousedown or touchstart for primary actions removes this built-in safety mechanism. The exception for essential down-events covers things like piano key applications or drag-and-drop operations where the down-event is inherently part of the interaction.

Why It Matters

Users with motor disabilities are more likely to accidentally activate the wrong target. Tremors, involuntary movements, and imprecise pointer control mean these users frequently need to correct their pointer position after pressing down. The standard browser click model (trigger on up-event) provides a built-in cancellation mechanism: press down, realize the mistake, slide the pointer off the target, and release to cancel. When developers override this by using mousedown or touchstart events, they remove this safety net. Users with cognitive disabilities may also need the ability to reconsider their action after initiating a click. Users with low vision may accidentally click the wrong element due to magnification and need the ability to cancel. Even users without disabilities benefit from pointer cancellation: everyone has experienced pressing down on the wrong button and wanting to slide away to cancel. This criterion preserves a fundamental interaction pattern that provides a safety margin for all users.

Common Failures and How to Fix Them

Actions triggered on mousedown instead of click

JavaScript event handlers use the mousedown event to trigger important actions like navigation, form submission, or destructive operations. Users cannot cancel these actions by moving their pointer away before releasing.

Inaccessible
<button id="delete-btn">Delete Account</button>
<script>
  document.getElementById('delete-btn').addEventListener('mousedown', function() {
    deleteAccount(); // Fires immediately on press, no way to cancel
  });
</script>
Accessible
<button id="delete-btn">Delete Account</button>
<script>
  document.getElementById('delete-btn').addEventListener('click', function() {
    deleteAccount(); // Fires on release, user can cancel by sliding away
  });
</script>

Touch actions triggered on touchstart without cancellation

A mobile-optimized interface uses touchstart events for navigation or actions to reduce perceived latency, but this prevents users from canceling accidental touches by sliding their finger away from the target.

Inaccessible
<div class="action-card" id="card">
  <h3>Premium Plan</h3>
  <p>$49/month</p>
</div>
<script>
  document.getElementById('card').addEventListener('touchstart', function() {
    window.location.href = '/checkout?plan=premium';
  });
</script>
Accessible
<a href="/checkout?plan=premium" class="action-card">
  <h3>Premium Plan</h3>
  <p>$49/month</p>
</a>
<!-- Using a standard link with click behavior allows natural cancellation.
     If a touchstart optimization is needed, cancel on touchmove: -->
<script>
  let touchMoved = false;
  card.addEventListener('touchstart', function() { touchMoved = false; });
  card.addEventListener('touchmove', function() { touchMoved = true; });
  card.addEventListener('touchend', function() {
    if (!touchMoved) window.location.href = '/checkout?plan=premium';
  });
</script>

How to Test

  1. Press and hold the mouse button on interactive elements without releasing, then move the pointer away from the element and release. Verify that the action is not triggered (it should only fire on the up-event within the target).
  2. Search JavaScript code for mousedown and touchstart event listeners and verify they are not used for primary actions like navigation, submission, or deletion.
  3. Test on a touchscreen device by pressing down on buttons and links, then sliding your finger away before lifting. Confirm that the action does not execute.
  4. For any actions that do trigger on the down-event, verify that either an undo mechanism is available or the down-event behavior is essential to the function.

CMS-Specific Guidance

This criterion commonly causes issues on these platforms:

Further Reading

Related WCAG Criteria