WCAG framgångskriterier · Level A
WCAG 2.5.2: Avbrytning av pekare
WCAG 2.5.2 kräver att funktionalitet som utlöses av en enda pekare (mus, beröring eller stylus) kan avbrytas eller ångras, för att förhindra oavsiktliga aktiveringar. Detta skyddar användare med motoriska funktionsnedsättningar som kan trycka eller klicka av misstag.
Vad den här regeln innebär
WCAG 2.5.2 Pointer Cancellation gäller all funktionalitet som styrs med en enda pekare — detta inkluderar musklick, tryck på pekskärm, tryck med penna och alla andra inmatningsenheter som aktiverar en punkt på skärmen. Kriteriet finns för att säkerställa att oavsiktliga aktiveringar orsakade av ett oavsiktligt tryck eller tryckning kan ångras innan de får effekt.
För att en interaktion med en enda pekare ska uppfylla detta kriterium måste den uppfylla minst ett av följande fyra villkor som definieras i WCAG-specifikationen:
- Ingen down-händelse: Funktionaliteten triggas inte vid down-händelsen (t.ex.
mousedown,touchstartellerpointerdown). Aktivering sker endast vid up-händelsen (mouseup,touchendellerpointerup). - Avbryt eller ångra: Det finns en mekanism för att avbryta åtgärden innan den slutförs, eller för att ångra åtgärden efter att den har slutförts.
- Up-reversal: Up-händelsen återställer alla resultat som triggades vid down-händelsen — till exempel en dragning som hoppar tillbaka om pekaren släpps utanför målet.
- Väsentligt undantag: Att trigga vid down-händelsen är väsentligt för funktionaliteten — till exempel ett pianotangentbord på skärmen där ljudet måste börja i samma ögonblick som tangenten trycks ned. Detta undantag är dock mycket snävt och gäller endast när tidpunkten för down-händelsen är grundläggande nödvändig.
I praktiska HTML- och JavaScript-termer innebär detta att utvecklare måste vara noggranna med var de kopplar händelselyssnare. Att använda mousedown, touchstart eller pointerdown för att omedelbart och oåterkalleligt utföra en åtgärd — såsom att skicka in ett formulär, radera en post eller lämna en sida — utan att tillhandahålla något sätt att avbryta eller ångra den åtgärden är ett tydligt misslyckande med detta kriterium. Standardbeteendet i webbläsare för inbyggda <button>- och <a>-element utlöser redan aktivering vid up-händelsen som standard, vilket innebär att korrekt implementerade inbyggda kontroller i allmänhet klarar detta kriterium utan extra ansträngning.
Egna interaktiva komponenter byggda med JavaScript — såsom dra-och-släpp-gränssnitt, gestbaserade reglage, karusellkontroller och bildkartor — är de vanligaste källorna till fel. Alla komponenter som kopplar oåterkallelig logik till en down-händelselyssnare utan att tillhandahålla avbrytande eller återställning misslyckas med detta kriterium.
Varför det är viktigt
Pointer Cancellation är främst ett kriterium utformat för att skydda användare med motoriska funktionsnedsättningar, men dess fördelar sträcker sig till en bred grupp användare, inklusive personer med skakningar, spasticitet, begränsad finmotorik eller kognitiva funktionsnedsättningar som påverkar uppmärksamhet och precision.
Föreställ dig en användare med Parkinsons sjukdom som navigerar på en e-handels kassasida på en pekskärm. Deras handskakning kan göra att fingret hamnar på en ”Bekräfta köp”-knapp som de inte avsåg att trycka på. Om köpet triggas i samma ögonblick som fingret rör vid skärmen — vid touchstart-händelsen — behandlas transaktionen omedelbart utan möjlighet att avbryta. Om aktiveringen i stället hade kopplats till touchend-händelsen skulle användaren kunna dra fingret bort från knappen innan de lyfter det, vilket avbryter åtgärden. Denna enkla skillnad mellan up- och down-händelsebindning kan vara skillnaden mellan en frustrerande och en tillgänglig upplevelse för miljontals användare.
Enligt Världshälsoorganisationen lever cirka 1,3 miljarder människor världen över med någon form av funktionsnedsättning, och motoriska funktionsnedsättningar utgör en betydande del av den populationen. Utöver funktionsnedsättning är oavsiktliga aktiveringar en vanlig frustration för alla användare på små pekskärmsenheter, vilket gör detta kriterium relevant även för allmän användbarhet.
Kognitiv funktionsnedsättning är en annan viktig aspekt. Användare som bearbetar information långsammare kan trycka på en knapp och sedan inse att de valde fel alternativ. Om åtgärden är oåterkallelig — triggad vid down-händelsen — har de ingen möjlighet att rätta till det. En ångra-mekanism eller aktivering vid up-händelsen ger dessa användare den tid de behöver för att bekräfta sin avsikt.
Ur ett affärsperspektiv förbättrar minskade oavsiktliga formulärinlämningar, köp och raderingar användarnöjdheten, minskar supportärenden och sänker avhoppsfrekvensen för transaktioner. En tillgänglig pekarinteraktionsmodell minskar också risken för juridiskt ansvar enligt tillgänglighetsregler i Turkiet och internationellt.
Relaterade Axe-core-regler
WCAG 2.5.2 kräver manuell testning och kan inte pålitligt utvärderas enbart av automatiska tillgänglighetsskannrar. Ingen specifik automatiserad axe-core-regel motsvarar direkt detta kriterium. Här är varför automatiserad detektion är otillräcklig:
- Varför automatisering misslyckas för pointer cancellation: Automatiska verktyg som axe-core kan analysera HTML och upptäcka vissa ARIA- eller strukturella problem, men de kan inte pålitligt avgöra den semantiska avsikten och återkalleligheten hos JavaScript-händelsehanterare. Ett verktyg kan upptäcka att en
mousedown-händelselyssnare finns på ett element, men det kan inte avgöra om den lyssnaren triggar en oåterkallelig åtgärd, om en ångra-mekanism finns någon annanstans i applikationen eller om tidpunkten för down-händelsen verkligen är väsentlig för funktionaliteten. Kombinationen av runtime-beteende, applikationstillstånd och användarkontext som krävs för att utvärdera detta kriterium ligger utanför räckvidden för statisk eller DOM-baserad automatiserad analys. - Vad manuella testare måste leta efter: Testare behöver interagera med varje interaktiv kontroll med en pekarenhet och noggrant observera när åtgärden triggas — vid tryck eller vid släpp. De måste också verifiera om det går att avbryta åtgärden genom att dra pekaren bort från elementet innan man släpper, och om någon ångra- eller avbryt-mekanism är tillgänglig efter aktivering.
- Partiella signaler från automatisering: Vissa lint-verktyg eller anpassade axe-regler kan flagga element med attributen
onmousedown,ontouchstartelleronpointerdownsom kräver granskning, men dessa flaggor kräver mänsklig bedömning för att avgöra överensstämmelse eller bristande överensstämmelse. Behandla alla sådana automatiska flaggor som en uppmaning till manuell granskning, inte som en definitiv felrapport.
Hur man testar
- Automatisk skanning (initial översikt): Kör axe DevTools eller Lighthouse mot sidan för att identifiera interaktiva element och eventuella anpassade händelsebindningar som flaggats för manuell granskning. Använd panelen Elements i Chrome DevTools för att inspektera händelselyssnare som är kopplade till knappar, länkar och anpassade kontroller — leta efter
mousedown-,touchstart- ellerpointerdown-hanterare på element som triggar oåterkalleliga åtgärder. - Test med muspekare — klick-och-dra-avbrytande: För varje interaktiv knapp, länk och anpassad kontroll på sidan, tryck ned och håll musknappen nedtryckt på elementet, dra sedan pekaren utanför elementets gräns innan du släpper. Om åtgärden triggas medan knappen hålls ned (innan släpp) är detta ett fel. Om att dra bort förhindrar att åtgärden triggas vid släpp är detta ett godkänt resultat för villkoren up-reversal eller ingen down-händelse.
- Test på pekskärmsenhet: På en pekskärmsenhet eller webbläsaremulator (Chrome DevTools device mode), tryck och håll på varje interaktivt element, dra sedan fingret bort innan du lyfter. Om åtgärden triggas omedelbart vid beröring (innan du lyfter fingret) är detta ett fel, om inte tidpunkten för down-händelsen är väsentlig. Verifiera att åtgärden inte triggas när du lyfter fingret utanför elementet.
- Kontroll av tangentbordsstyrning: Även om detta kriterium specifikt handlar om pekarinteraktioner, verifiera att alla interaktiva element också kan användas med tangentbord. Tryck på
Tabför att fokusera varje element ochEnterellerSpaceför att aktivera det, och bekräfta att elementet kan nås och fungerar utan pekare — detta stödjer den bredare tillgänglighetsbilden. - Verifiering av ångra-/avbryt-mekanism: För åtgärder som är kopplade till down-händelser (där det väsentliga undantaget kan gälla), bekräfta att det finns en tydlig ångra- eller avbryt-mekanism som är tillgänglig för alla användare, inklusive de som använder hjälpmedelsteknik. Till exempel, efter en dra-och-släpp-åtgärd, finns det en ”ångra”-knapp som kan nås med tangentbord och skärmläsare?
- Kombinerat test med skärmläsare och pekare (NVDA + Firefox, JAWS + Chrome, VoiceOver + Safari): Aktivera interaktiva element med både pekare och skärmläsarens virtuella markör. Bekräfta att pekartriggade åtgärder är konsekventa med skärmläsartriggade åtgärder och att inga omedelbara oåterkalleliga åtgärder triggas oväntat.
- Kodgranskning: Sök i kodbasen efter händelselyssnarbindningar:
addEventListener('mousedown',addEventListener('touchstart',addEventListener('pointerdown'och inline-attributenonmousedown,ontouchstart. Utvärdera för varje förekomst om hanteraren triggar en oåterkallelig åtgärd och om något av de fyra WCAG-villkoren är uppfyllt.
Hur man åtgärdar
Oåterkallelig åtgärd på mousedown — Felaktigt
<!-- FAIL: Delete fires immediately on mousedown, no cancellation possible -->
<button onmousedown='deleteRecord(recordId)'>Delete Record</button>
<script>
function deleteRecord(id) {
// Record is deleted immediately on button press, before the user releases
fetch('/api/records/' + id, { method: 'DELETE' });
}
</script>
Oåterkallelig åtgärd på mousedown — Korrekt
<!-- PASS: Delete fires on click (up-event), native button behavior -->
<button onclick='deleteRecord(recordId)'>Delete Record</button>
<!-- Even better: provide confirmation dialog as an additional abort mechanism -->
<button onclick='confirmDelete(recordId)'>Delete Record</button>
<script>
function confirmDelete(id) {
// User can cancel via the dialog — satisfies the Abort or Undo condition
if (confirm('Are you sure you want to delete this record? This cannot be undone.')) {
fetch('/api/records/' + id, { method: 'DELETE' });
}
}
</script>
Touchgest triggar på touchstart — Felaktigt
<!-- FAIL: Action fires immediately on touchstart, no opportunity to abort -->
<div id='buy-btn'>Buy Now</div>
<script>
document.getElementById('buy-btn').addEventListener('touchstart', function() {
// Purchase initiated immediately when finger touches the element
initiatePurchase();
});
</script>
Touchgest triggar på touchstart — Korrekt
<!-- PASS: Use a native button and bind to click, which fires on touchend -->
<button id='buy-btn'>Buy Now</button>
<script>
// The 'click' event on a native button fires on the up-event (touchend/mouseup)
// giving users the ability to cancel by sliding their finger away before releasing
document.getElementById('buy-btn').addEventListener('click', function() {
initiatePurchase();
});
</script>
Anpassad drag-och-släpp utan up-reversal — Felaktigt
<!-- FAIL: Item is moved to new position on pointerdown, not on pointerup -->
<div class='draggable' onpointerdown='moveItemToTarget(this)'>
Drag me
</div>
Anpassad drag-och-släpp med up-reversal — Korrekt
<!-- PASS: Item moves to target only when pointer is released over the drop zone -->
<!-- If user drags away before releasing, item returns to original position -->
<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) {
// Only records intent; does not move the item yet
event.dataTransfer.setData('text/plain', event.target.id);
}
function handleDrop(event) {
event.preventDefault();
// Item is moved only on drop (up-event equivalent)
// If user releases outside drop zone, item returns to origin — up-reversal satisfied
const id = event.dataTransfer.getData('text/plain');
event.currentTarget.appendChild(document.getElementById(id));
}
</script>
Vanliga misstag
- Att koppla oåterkalleliga åtgärder såsom formulärinlämning, radering av poster eller navigering till
mousedown- ellerpointerdown-händelser i stället förclick, som triggas vid up-händelsen och tillåter avbrytande genom att dra bort som standard. - Att använda
touchstartför att trigga köp, bekräftelser eller datamodifieringar i e-handels- eller bankgränssnitt, där en kort fingerkontakt inte bör behandlas som bekräftad användaravsikt. - Att anta att bara för att en knapp använder ett inbyggt
<button>-element är all JavaScript som är kopplad till den automatiskt förenlig — enmousedown-lyssnare som lagts till viaaddEventListenerbryter fortfarande mot detta kriterium om den triggar en oåterkallelig åtgärd. - Att anropa modala dialoger, överlägg eller helsidesnavigeringsändringar vid en pekares down-händelse, vilket desorienterar användare som inte avsåg att aktivera kontrollen och inte har något sätt att backa.
- Att implementera anpassade reglage eller intervallkontroller som skickar ett värde till servern vid
pointerdowni stället för att vänta påpointerupeller en separat bekräftelseåtgärd. - Att förlita sig på webbläsarens standarddialog
confirm()som den enda ångra-mekanismen för en down-händelse utan att testa om hjälpmedelstekniker pålitligt kan komma åt och använda dialogen innan den destruktiva åtgärden slutförs. - Att inte tillhandahålla någon visuell eller programmatisk återkoppling om att en down-händelse är pågående, vilket gör det omöjligt för användare att förstå att de skulle kunna avbryta genom att flytta pekaren bort innan de släpper.
- Att tolka det väsentliga undantaget alltför brett — till exempel att hävda att en ”snabbköp”-knapp måste triggas vid
mousedownför snabbhet, när det inte finns någon verklig tidsbegränsning och påståendet är en produktbekvämlighet snarare än en funktionell nödvändighet. - Att inte testa på både mus- och pekinmatningsenheter — ett gränssnitt kan korrekt använda up-händelser för musinteraktioner men ändå koppla oåterkalleliga åtgärder till
touchstarti en separat mobilspecifik kodväg. - Att implementera ångra-funktionalitet som endast är tillgänglig via tangentbordsgenväg (t.ex. Ctrl+Z) utan att tillhandahålla en motsvarande kontroll på skärmen, vilket lämnar användare som endast använder pekare utan en avbryt-mekanism efter en down-händelseaktivering.
Relation till Turkiets tillgänglighetsregler
Turkiets presidentdekret 2025/10, publicerat i den officiella tidningen nr 32933 den 21 juni 2025, fastställer obligatoriska krav på webbtillgänglighet i linje med WCAG 2.2-standarder. Enligt detta dekret är överensstämmelse med kriterier på nivå A — inklusive WCAG 2.5.2 Pointer Cancellation — juridiskt krav för ett brett spektrum av offentliga och privata aktörer som driver digitala tjänster i Turkiet.
Dekretet omfattar ett brett spektrum av organisationer. Offentliga institutioner och statliga organ måste uppnå full överensstämmelse med nivå A inom ett år från dekretets publiceringsdatum. Privata aktörer som omfattas av regleringen — inklusive e-handelsplattformar, banker och finansiella institutioner, sjukhus och vårdgivare, telekommunikationsföretag med 200,000 eller fler abonnenter, resebyråer, privata transportföretag och privatskolor som godkänts av Ministry of National Education (MoNE) — får ett tvåårigt fönster för att uppnå efterlevnad.
För dessa aktörer innebär underlåtenhet att implementera Pointer Cancellation korrekt en verklig regulatorisk risk. Föreställ dig en turkisk e-handelsplattform vars mobila kassasida triggar betalningsbekräftelse vid touchstart — en sådan implementation skulle utgöra ett direkt brott mot WCAG 2.5.2 och därmed mot presidentdekretet. Användare som oavsiktligt initierar ett köp på den plattformen på grund av skakningar, motorisk funktionsnedsättning eller en enkel feltryckning skulle ha juridisk grund för att hävda att plattformen inte uppfyllde sina tillgänglighetsåtaganden.
Utöver regulatorisk efterlevnad bör turkiska organisationer inse att Pointer Cancellation inte bara är en teknisk kryssruta utan en grundläggande designprincip som skyddar användares möjlighet att interagera säkert och avsiktligt med digitala tjänster. Att implementera aktivering vid up-händelser och ångra-mekanismer i interaktiva komponenter — från kundvagnar och bokningssystem för möten till dokumenthanteringsverktyg — visar ett engagemang för inkluderande design som gynnar alla användare, inte bara dem med funktionsnedsättningar.
Organisationer som omfattas av dekretet bör genomföra systematiska granskningar av sina mönster för JavaScript-händelsehantering, särskilt på mobiloptimerade sidor och anpassade interaktiva komponenter, för att identifiera och åtgärda alla down-händelseaktiveringar som saknar avbrytande- eller återställningsmekanismer. Att dokumentera dessa åtgärdsinsatser kommer också att stödja rapporteringsskyldigheter om överensstämmelse som kan krävas enligt dekretets bestämmelser om tillsyn.
Källor och referenser
- 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
