- Success Criterion 2.5.2
- Conformance level A
Menu That Opens and Selects on the Same Press-and-Drag
2.5.2 — Pointer Cancellation
Scenario
Setting
A bank's mobile money-transfer screen
What’s wrong
Menus opening AND selecting on the same down-press (press-drag-release patterns without up-event confirmation or abort).
Example
recipientList.addEventListener('pointerdown', (e) => {
activeRecipient = getRecipientAt(e.clientY); // locked in the instant the finger lands
});
recipientList.addEventListener('pointerup', () => {
startTransfer(activeRecipient); // fires on any release, with no separate confirm step
}); Why it matters
Someone who presses down near the wrong name and lifts off, even just to reposition, can start a transfer to the wrong recipient.
How to test
Press down on a menu item and check whether it's already selected before you release: press-drag-release combos that select on down-press without requiring the up-event fail.
How to fix
Selection and the destructive action must be two separate steps, each cancelable before the transfer actually fires.
recipientList.addEventListener('pointerup', (e) => {
const target = getRecipientAt(e.clientY);
showConfirmScreen(target); // a separate, explicit confirm step
}); Outcome
A customer sees a confirmation screen naming the recipient and can back out before any money moves.
Who is affected
Users with tremor and switch-access users whose device can register an unintended press-and-release.
Learn more
- Understanding Understanding document (opens in a new tab)
Related scenarios
- Action That Fires the Instant the Pointer Goes Down
- Button Firing on Touchstart Instead of Release
- Drag Interaction That Commits With No Way to Cancel
- Destructive Action Firing on Press With No Way to Abort
- Press-to-Trigger Control Where Release Confirmation Was Possible
- Custom Gesture That Commits Mid-Motion Instead of on Release