WCAG-succescriteria · Level A
WCAG 2.5.2: Annulering van aanwijzer
WCAG 2.5.2 vereist dat functionaliteit die wordt geactiveerd door een enkele aanwijzer (muis, aanraking of stylus) kan worden geannuleerd of teruggedraaid, om onbedoelde activeringen te voorkomen. Dit beschermt gebruikers met motorische beperkingen die mogelijk per ongeluk tikken of klikken.
Wat Deze Regel Betekent
WCAG 2.5.2 Pointer Cancellation is van toepassing op alle functionaliteit die wordt bediend met één enkele pointer — dit omvat muiskliks, tikken op een touchscreen, stylusdrukken en elk ander invoerapparaat dat een punt op het scherm activeert. Het criterium bestaat om ervoor te zorgen dat onbedoelde activeringen door een ongewenste druk of tik ongedaan kunnen worden gemaakt voordat ze effect hebben.
Om te voldoen aan dit criterium moet een interactie met één pointer aan ten minste één van de volgende vier voorwaarden voldoen, zoals gedefinieerd in de WCAG-specificatie:
- Geen down-event: De functionaliteit wordt niet geactiveerd bij het down-event (bijv.
mousedown,touchstartofpointerdown). Activering vindt alleen plaats bij het up-event (mouseup,touchendofpointerup). - Afbreken of ongedaan maken: Er is een mechanisme beschikbaar om de actie af te breken vóór voltooiing, of om de actie ongedaan te maken nadat deze is voltooid.
- Up-reversal: Het up-event draait elk resultaat terug dat werd geactiveerd bij het down-event — bijvoorbeeld een sleepactie die terugveert als de pointer buiten het doel wordt losgelaten.
- Essentiële uitzondering: Activering bij het down-event is essentieel voor de functionaliteit — bijvoorbeeld een pianoklavier op het scherm waarbij het geluid moet beginnen op het moment dat de toets wordt ingedrukt. Deze uitzondering is echter zeer beperkt en geldt alleen wanneer de timing van het down-event fundamenteel noodzakelijk is.
In praktische HTML- en JavaScript-termen betekent dit dat ontwikkelaars zorgvuldig moeten zijn met waar ze event listeners koppelen. Het gebruik van mousedown, touchstart of pointerdown om onmiddellijk en onomkeerbaar een actie uit te voeren — zoals het verzenden van een formulier, het verwijderen van een record of het verlaten van een pagina — zonder een manier te bieden om die actie te annuleren of ongedaan te maken, is een duidelijke schending van dit criterium. Het standaardbrowsergedrag voor native elementen <button> en <a> activeert al standaard bij het up-event, wat betekent dat correct geïmplementeerde native controls dit criterium doorgaans halen zonder extra inspanning.
Aangepaste interactieve componenten die met JavaScript zijn gebouwd — zoals drag-and-dropinterfaces, gebarengebaseerde sliders, carrouselbediening en imagemaps — zijn de meest voorkomende bronnen van fouten. Elke component die onomkeerbare logica koppelt aan een down-event-listener zonder annulering of terugdraaien te bieden, voldoet niet aan dit criterium.
Waarom Het Belangrijk Is
Pointer Cancellation is in de eerste plaats een criterium dat is ontworpen om gebruikers met motorische beperkingen te beschermen, maar de voordelen strekken zich uit tot een brede groep gebruikers, waaronder mensen met tremoren, spasticiteit, beperkte fijne motoriek of cognitieve beperkingen die aandacht en precisie beïnvloeden.
Denk aan een gebruiker met de ziekte van Parkinson die een afrekenpagina van een e-commercesite op een touchscreen doorloopt. Door een handtremor kan hun vinger op een knop “Aankoop bevestigen” landen die ze niet wilden aantikken. Als de aankoop wordt geactiveerd op het moment dat de vinger het scherm raakt — bij het touchstart-event — wordt de transactie onmiddellijk verwerkt zonder mogelijkheid tot annuleren. Als de activering daarentegen aan het touchend-event was gekoppeld, had de gebruiker de vinger van de knop kunnen wegschuiven voordat deze werd opgetild, waardoor de actie werd geannuleerd. Dit eenvoudige verschil tussen binding op up-event en down-event kan voor miljoenen gebruikers het verschil betekenen tussen een frustrerende en een toegankelijke ervaring.
Volgens de Wereldgezondheidsorganisatie leven wereldwijd ongeveer 1,3 miljard mensen met een of andere vorm van beperking, en motorische beperkingen vormen een aanzienlijk deel van die populatie. Los van beperkingen zijn onbedoelde activeringen een veelvoorkomende frustratie voor elke gebruiker op een klein touchscreenapparaat, waardoor dit criterium ook relevant is voor algemene bruikbaarheid.
Cognitieve beperking is een andere belangrijke overweging. Gebruikers die informatie langzamer verwerken, kunnen op een knop drukken en zich vervolgens realiseren dat ze de verkeerde optie hebben gekozen. Als de actie onomkeerbaar is — geactiveerd bij het down-event — hebben ze geen uitweg. Een mechanisme voor ongedaan maken of activering bij het up-event geeft deze gebruikers de tijd die ze nodig hebben om hun intentie te bevestigen.
Vanuit zakelijk perspectief verbetert het verminderen van onbedoelde formulierverzendingen, aankopen en verwijderingen de gebruikerstevredenheid, vermindert het het aantal supportverzoeken en verlaagt het de percentages van afgebroken transacties. Een toegankelijk pointerinteractiemodel verkleint ook het risico op juridische aansprakelijkheid onder toegankelijkheidsregelgeving in Turkije en internationaal.
Gerelateerde Axe-core-regels
WCAG 2.5.2 vereist handmatige tests en kan niet betrouwbaar alleen door geautomatiseerde toegankelijkheidsscanners worden beoordeeld. Er is geen specifieke geautomatiseerde axe-core-regel die direct aan dit criterium is gekoppeld. Dit is waarom geautomatiseerde detectie onvoldoende is:
- Waarom automatisering faalt bij pointer cancellation: Geautomatiseerde tools zoals axe-core kunnen HTML parsen en bepaalde ARIA- of structurele problemen detecteren, maar ze kunnen niet betrouwbaar de semantische intentie en omkeerbaarheid van JavaScript-eventhandlers bepalen. Een tool kan detecteren dat er een
mousedown-event-listener op een element bestaat, maar kan niet bepalen of die listener een onomkeerbare actie triggert, of er elders in de applicatie een mechanisme voor ongedaan maken aanwezig is, of dat de timing van het down-event werkelijk essentieel is voor de functionaliteit. De combinatie van runtimegedrag, applicatiestatus en gebruikerscontext die nodig is om dit criterium te beoordelen, valt buiten het bereik van statische of DOM-gebaseerde geautomatiseerde analyse. - Waar handmatige testers op moeten letten: Testers moeten met elk interactief control-element een pointerapparaat gebruiken en precies observeren wanneer de actie wordt geactiveerd — bij indrukken of bij loslaten. Ze moeten ook verifiëren of het wegschuiven van de pointer van het element vóór het loslaten de actie annuleert, en of er na activering een mechanisme voor ongedaan maken of afbreken toegankelijk is.
- Gedeeltelijke signalen uit automatisering: Sommige lintingtools of aangepaste axe-regels kunnen elementen met attributen als
onmousedown,ontouchstartofonpointerdownmarkeren als “vereist beoordeling”, maar voor deze signalen is menselijke beoordeling nodig om conformiteit of niet-conformiteit vast te stellen. Behandel dergelijke geautomatiseerde signalen als een aanwijzing voor handmatig onderzoek, niet als een definitief foutrapport.
Hoe te Testen
- Geautomatiseerde scan (eerste inventarisatie): Voer axe DevTools of Lighthouse uit op de pagina om interactieve elementen en eventuele aangepaste eventbindings te identificeren die voor handmatige beoordeling zijn gemarkeerd. Gebruik in Chrome DevTools het tabblad Elements om event listeners te inspecteren die zijn gekoppeld aan knoppen, links en aangepaste controls — let op handlers voor
mousedown,touchstartofpointerdownop elementen die onomkeerbare acties triggeren. - Test met muis-pointer — klik-en-sleep-annulering: Druk voor elke interactieve knop, link en aangepaste control op de pagina de muisknop in op het element en houd deze ingedrukt, sleep vervolgens de pointer buiten de grens van het element voordat je loslaat. Als de actie wordt geactiveerd terwijl de knop is ingedrukt (vóór het loslaten), is dit een fout. Als het weg slepen voorkomt dat de actie bij het loslaten wordt geactiveerd, is dit een geslaagde test voor de voorwaarden up-reversal of no-down-event.
- Test op touchapparaat: Tik op een touchscreenapparaat of browseremulator (Chrome DevTools device mode) op elk interactief element en houd vast, schuif vervolgens je vinger weg voordat je loslaat. Als de actie onmiddellijk bij aanraking wordt geactiveerd (voordat je je vinger optilt), is dit een fout, tenzij de timing van het down-event essentieel is. Controleer dat het optillen van je vinger buiten het element de actie niet triggert.
- Controle van toetsenbordbediening: Hoewel dit criterium specifiek over pointerinteracties gaat, moet je verifiëren dat alle interactieve elementen ook met het toetsenbord bedienbaar zijn. Druk op
Tabom elk element te focussen en opEnterofSpatieom het te activeren, en bevestig dat het element bereikbaar en functioneel is zonder pointer — dit ondersteunt het bredere toegankelijkheidsbeeld. - Verificatie van undo-/afbreekmechanisme: Voor acties die aan down-events zijn gekoppeld (waar de essentiële uitzondering mogelijk van toepassing is), controleer je of er een duidelijk mechanisme voor ongedaan maken of afbreken bestaat en toegankelijk is voor alle gebruikers, inclusief gebruikers van ondersteunende technologieën. Is er bijvoorbeeld na een drag-and-dropactie een “ongedaan maken”-knop die met toetsenbord en schermlezer bereikbaar is?
- Test met combinatie van schermlezer en pointer (NVDA + Firefox, JAWS + Chrome, VoiceOver + Safari): Activeer interactieve elementen met zowel de pointer als de virtuele cursor van de schermlezer. Bevestig dat pointer-geactiveerde acties consistent zijn met acties die door de schermlezer worden geactiveerd en dat er geen onmiddellijke onomkeerbare acties onverwacht worden uitgevoerd.
- Code review: Doorzoek de codebase naar event listener-bindings:
addEventListener('mousedown',addEventListener('touchstart',addEventListener('pointerdown'en inline-attributenonmousedown,ontouchstart. Beoordeel voor elk voorkomen of de handler een onomkeerbare actie triggert en of aan een van de vier WCAG-voorwaarden wordt voldaan.
Hoe te Herstellen
Onomkeerbare actie op mousedown — Onjuist
<!-- FAIL: Delete wordt onmiddellijk bij mousedown uitgevoerd, geen annulering mogelijk -->
<button onmousedown='deleteRecord(recordId)'>Delete Record</button>
<script>
function deleteRecord(id) {
// Record wordt onmiddellijk bij het indrukken van de knop verwijderd, vóór het loslaten
fetch('/api/records/' + id, { method: 'DELETE' });
}
</script>
Onomkeerbare actie op mousedown — Juist
<!-- PASS: Delete wordt bij click (up-event) uitgevoerd, native knopgedrag -->
<button onclick='deleteRecord(recordId)'>Delete Record</button>
<!-- Nog beter: geef een bevestigingsdialoog als extra afbreekmechanisme -->
<button onclick='confirmDelete(recordId)'>Delete Record</button>
<script>
function confirmDelete(id) {
// Gebruiker kan via de dialoog annuleren — voldoet aan de voorwaarde Afbreken of Ongedaan maken
if (confirm('Are you sure you want to delete this record? This cannot be undone.')) {
fetch('/api/records/' + id, { method: 'DELETE' });
}
}
</script>
Touchgebaar vuurt op touchstart — Onjuist
<!-- FAIL: Actie wordt onmiddellijk bij touchstart uitgevoerd, geen mogelijkheid om af te breken -->
<div id='buy-btn'>Buy Now</div>
<script>
document.getElementById('buy-btn').addEventListener('touchstart', function() {
// Aankoop wordt gestart zodra de vinger het element raakt
initiatePurchase();
});
</script>
Touchgebaar vuurt op touchstart — Juist
<!-- PASS: Gebruik een native knop en bind aan click, dat vuurt bij touchend -->
<button id='buy-btn'>Buy Now</button>
<script>
// Het 'click'-event op een native knop vuurt bij het up-event (touchend/mouseup)
// waardoor gebruikers kunnen annuleren door hun vinger weg te schuiven vóór het loslaten
document.getElementById('buy-btn').addEventListener('click', function() {
initiatePurchase();
});
</script>
Aangepaste drag-and-drop zonder up-reversal — Onjuist
<!-- FAIL: Item wordt bij pointerdown naar de nieuwe positie verplaatst, niet bij pointerup -->
<div class='draggable' onpointerdown='moveItemToTarget(this)'>
Drag me
</div>
Aangepaste drag-and-drop met up-reversal — Juist
<!-- PASS: Item wordt alleen naar het doel verplaatst wanneer de pointer boven de dropzone wordt losgelaten -->
<!-- Als de gebruiker weg sleept vóór het loslaten, keert het item terug naar de oorspronkelijke positie -->
<div
class='draggable'
draggable='true'
ondragstart='handleDragStart(event)'
>
Drag me
</div>
<div
class='drop-zone'
ondragover='event.preventDefault()'
ondrop='handleDrop(event)'
aria-label='Drop zone'
>
Drop here
</div>
<script>
function handleDragStart(event) {
// Registreert alleen de intentie; verplaatst het item nog niet
event.dataTransfer.setData('text/plain', event.target.id);
}
function handleDrop(event) {
event.preventDefault();
// Item wordt alleen bij drop verplaatst (equivalent van up-event)
// Als de gebruiker buiten de dropzone loslaat, keert het item terug naar de oorsprong — up-reversal is vervuld
const id = event.dataTransfer.getData('text/plain');
event.currentTarget.appendChild(document.getElementById(id));
}
</script>
Veelvoorkomende Fouten
- Onomkeerbare acties zoals formulierverzending, recordverwijdering of navigatie koppelen aan
mousedown- ofpointerdown-events in plaats van aanclick, dat bij het up-event vuurt en standaard annulering door weg slepen mogelijk maakt. - Gebruik van
touchstartom aankopen, bevestigingen of datamutaties te triggeren in e-commerce- of bankinterfaces, waar een kortstondig vingercontact niet als bevestigde gebruikersintentie mag worden beschouwd. - Aannemen dat, omdat een knop een native element
<button>gebruikt, alle JavaScript dat eraan is gekoppeld automatisch compliant is — eenmousedown-listener die viaaddEventListeneris toegevoegd, schendt dit criterium nog steeds als deze een onomkeerbare actie triggert. - Modale dialogen, overlays of navigatiewijzigingen op volledige pagina activeren bij het down-event van een pointer, wat gebruikers desoriënteert die de control niet wilden activeren en geen manier hebben om terug te keren.
- Aangepaste slider- of range-controls implementeren die een waarde naar de server doorgeven bij
pointerdownin plaats van te wachten oppointerupof een aparte bevestigingsactie. - Vertrouwen op de standaardbrowserdialoog
confirm()als het enige mechanisme voor ongedaan maken van een down-event-actie zonder te testen of ondersteunende technologieën de dialoog betrouwbaar kunnen bereiken en bedienen voordat de destructieve actie is voltooid. - Geen visuele of programmatische feedback geven dat een down-event-actie in behandeling is, waardoor het voor gebruikers onmogelijk is te begrijpen dat ze kunnen afbreken door de pointer vóór het loslaten weg te bewegen.
- De essentiële uitzondering te ruim interpreteren — bijvoorbeeld beweren dat een “quick-buy”-knop omwille van snelheid bij
mousedownmoet vuren, terwijl er geen echte timingbeperking bestaat en de claim een productgemak is in plaats van een functionele noodzaak. - Niet testen op zowel muis- als touchinvoerapparaten — een interface kan correct up-events gebruiken voor muisinteracties, maar nog steeds onomkeerbare acties koppelen aan
touchstartin een aparte, mobiel-specifieke codepad. - Undo-functionaliteit implementeren die alleen via een toetsenbordsneltoets (bijv. Ctrl+Z) toegankelijk is, zonder een gelijkwaardig on-screen control te bieden, waardoor gebruikers die uitsluitend een pointer gebruiken geen annuleringsmechanisme hebben na een down-event-activering.
Relatie met de Toegankelijkheidsregelgeving van Turkije
De Presidentiële Circulaire 2025/10 van Turkije, gepubliceerd in het Staatsblad nr. 32933 op 21 juni 2025, stelt verplichte webtoegankelijkheidseisen vast die zijn afgestemd op de WCAG 2.2-standaarden. Onder deze circulaire is conformiteit met criteria op Niveau A — waaronder WCAG 2.5.2 Pointer Cancellation — wettelijk vereist voor een breed scala aan publieke en private entiteiten die digitale diensten in Turkije aanbieden.
De circulaire heeft betrekking op een breed spectrum aan organisaties. Overheidsinstellingen en publieke organen moeten binnen één jaar na de publicatiedatum van de circulaire volledige conformiteit met Niveau A bereiken. Private sectorentiteiten die onder de regeling vallen — waaronder e-commerceplatforms, banken en financiële instellingen, ziekenhuizen en zorgaanbieders, telecommunicatiebedrijven met 200,000 of meer abonnees, reisbureaus, particuliere vervoersbedrijven en particuliere scholen die zijn gemachtigd door het Ministry of National Education (MoNE) — krijgen een termijn van twee jaar om te voldoen.
Voor deze betrokken entiteiten brengt het niet correct implementeren van Pointer Cancellation een reëel regelgevingsrisico met zich mee. Denk aan een Turks e-commerceplatform waarvan de mobiele afrekenpagina betalingsbevestiging triggert bij touchstart — een dergelijke implementatie zou een directe schending vormen van WCAG 2.5.2 en daarmee ook van de Presidentiële Circulaire. Gebruikers die op dat platform per ongeluk een aankoop starten door een tremor, motorische beperking of een simpele mis-tap, zouden juridische gronden hebben om te stellen dat het platform zijn toegankelijkheidsverplichtingen niet is nagekomen.
Los van naleving van regelgeving moeten Turkse organisaties erkennen dat Pointer Cancellation niet slechts een technisch afvinkvakje is, maar een fundamenteel ontwerpprincipe dat de mogelijkheid van gebruikers beschermt om veilig en doelbewust met digitale diensten te interageren. Het implementeren van up-event-activering en mechanismen voor ongedaan maken in alle interactieve componenten — van winkelwagens en systemen voor het boeken van afspraken tot documentbeheertools — toont een inzet voor inclusief ontwerp die alle gebruikers ten goede komt, niet alleen mensen met een beperking.
Organisaties die onder de circulaire vallen, moeten systematische audits uitvoeren van hun JavaScript-eventafhandelingspatronen, met name op mobiel geoptimaliseerde pagina’s en aangepaste interactieve componenten, om down-event-activeringen zonder annulering of terugdraai-mechanismen te identificeren en te verhelpen. Het documenteren van deze herstelmaatregelen ondersteunt ook de rapportageverplichtingen rond conformiteit die onder de handhavingsbepalingen van de circulaire kunnen worden vereist.
Bronnen & referenties
- W3C Understanding 2.5.2 Pointer Cancellation
- W3C Techniques for 2.5.2 Pointer Cancellation
- W3C Technique G212: Using native controls to ensure functionality is triggered on the up-event
- MDN: Pointer events
- MDN: Element: click event
- WebAIM: Motor Disabilities and Pointer Accessibility
- Deque University: Pointer Cancellation Overview
