- Poziom
- A
- Od wersji
- WCAG 2.1
2.5.2 Rezygnacja ze wskazania
Samo naciśnięcie kontrolki nie może uruchamiać działania, którego nie da się cofnąć. Zwykle działanie następuje po puszczeniu, więc kto nacisnął nie to, co trzeba, może zsunąć palec lub kursor i puścić.
/ Czego wymaga
Działanie wskaźnikiem ma dwa momenty: zdarzenie naciśnięcia, gdy przycisk zostaje wciśnięty albo palec dotyka ekranu, i zdarzenie zwolnienia, gdy zostaje puszczony. Dla każdej funkcji obsługiwanej pojedynczym wskaźnikiem kryterium wymaga, żeby spełniony był co najmniej jeden z czterech warunków. Zdarzenie naciśnięcia nie wykonuje żadnej części funkcji. Albo funkcja kończy się przy zwolnieniu i można ją przerwać przed zakończeniem lub cofnąć po nim. Albo zwolnienie odwraca to, co zrobiło naciśnięcie, jak podgląd widoczny tylko podczas przytrzymania. Albo wykonanie funkcji przy naciśnięciu jest niezbędne.
Osoby z drżeniem rąk, słabym wzrokiem lub niepełnosprawnością poznawczą często dotykają albo klikają nie ten cel. Działanie przy zwolnieniu daje im wbudowaną drogę wyjścia: zsuwają wskaźnik z celu, zanim puszczą, i nic się nie dzieje. W3C uznaje za niezbędne funkcje, które naśladują naciśnięcie klawisza klawiatury lub klawiatury numerycznej, a jako inne przykłady podaje pianino na ekranie i grę zależną od precyzyjnego wyczucia czasu. Kryterium dotyczy treści, która sama interpretuje działania wskaźnika, a nie przeglądarki czy technologii wspomagających. Zdarzenie click w JavaScripcie następuje przy zwolnieniu, więc natywne przyciski i linki z obsługą click spełniają je bez dodatkowej pracy.
/ Jak strony go nie spełniają
- Przycisk zamykania okna dialogowego z długim formularzem nasłuchuje zdarzeń mousedown, pointerdown lub touchstart, więc jedno omsknięcie palca zamyka okno, a wpisane dane przepadają.
- Ikona kosza na liście usuwa wiersz przy pointerdown, bez potwierdzenia i bez możliwości cofnięcia.
- Pozycja menu przenosi na inną stronę przy mousedown, więc kto ją naciśnie i zsunie kursor, i tak trafia na tę stronę.
- Przycisk wysyłania albo zakupu działa przy touchstart, w chwili gdy przewijający palec na nim wyląduje.
- Na sortowanej liście puszczenie przeciąganego elementu poza wszystkimi strefami upuszczania i tak go przenosi, a cofnąć się tego nie da.
/ Jak sprawdzić samodzielnie
- Naciśnij i przytrzymaj przycisk myszy na każdej kontrolce albo połóż na niej palec, nie puszczając. Nic nieodwracalnego nie powinno się jeszcze wydarzyć.
- Nadal trzymając, zsuń wskaźnik z kontrolki i puść go poza nią. Działanie nie powinno się wykonać.
- Jeśli działanie jednak następuje przy naciśnięciu, poszukaj drogi powrotu: zwolnienie je odwraca, pojawia się kontrolka cofania albo funkcja jest niezbędna, jak klawisz klawiatury ekranowej.
- Przy przeciąganiu i upuszczaniu podnieś element i puść go poza strefami upuszczania albo w miejscu, z którego wyszedł. Powinien wrócić na swoje miejsce albo przeniesienie powinno wymagać potwierdzenia lub dać się cofnąć.
- W narzędziach deweloperskich otwórz listę nasłuchiwaczy zdarzeń podejrzanych kontrolek albo przeszukaj skrypty pod kątem obsługi mousedown, pointerdown i touchstart, która wykonuje właściwą pracę.
/ Jak to naprawić
- Podpinaj działania pod zdarzenie click, które następuje przy zwolnieniu, zamiast pod mousedown, pointerdown czy touchstart.
- Buduj kontrolki z elementów button i a, żeby przeglądarka stosowała własną aktywację przy zwolnieniu.
- Tam, gdzie naciśnięcie musi coś rozpocząć, na przykład przeciąganie, kończ działanie przy pointerup tylko wtedy, gdy wskaźnik jest nad właściwym celem, a przy pointercancel lub zwolnieniu w innym miejscu przywracaj stan sprzed naciśnięcia.
- Działaniom niszczącym, które wykonują się przy naciśnięciu, dodaj kontrolkę cofania albo krok potwierdzenia.
- Zdarzenia naciśnięcia używaj do podglądu przy przytrzymaniu, który znika po zwolnieniu, oraz do funkcji niezbędnych przy naciśnięciu, takich jak klawisze klawiatury ekranowej.
/ Co sprawdza nasz skaner
Żaden automatyczny test w naszym skanie nie obejmuje rezygnacji ze wskazania. To, czy działanie następuje przy naciśnięciu, czy przy zwolnieniu, rozstrzyga obsługa zdarzeń, której skan nie czyta, a skan nigdy nie naciska kontrolki i nie zsuwa z niej wskaźnika, żeby zobaczyć skutek. HTML_CodeSniffer wskazuje atrybuty onmousedown i ontouchstart zapisane w kodzie HTML, ale tylko jako uwagi, a skan zachowuje wyłącznie błędy. W audycie ręcznym każdą kontrolkę naciska się, zsuwa z niej wskaźnik i puszcza.
/ Kto je łamie, według naszych pomiarów
Cotygodniowy indeks nie ma danych dla tego kryterium, bo żaden test uruchamiany przez skan witryny go nie sprawdza. Ocenia je człowiek i do tego służy audyt ręczny.
Jedna strona na podmiot, mierzona automatycznie w tygodniowym cyklu. Jeśli podmiot coś naprawił od ostatniego pomiaru, zmiana będzie widoczna przy następnym, a każdy podmiot może odpowiedzieć na swojej stronie.
/ Pytania o to kryterium
Czy używanie mousedown lub touchstart narusza WCAG?
Nie automatycznie. Kryterium nie jest spełnione dopiero wtedy, gdy naciśnięcie wykonuje część funkcji, a żaden z pozostałych warunków nie zachodzi: nie da się przerwać ani cofnąć, zwolnienie niczego nie odwraca i nie ma niezbędnego powodu. Podgląd przy przytrzymaniu, który znika po puszczeniu, jest w porządku. Usuwanie albo zamykanie przy mousedown bez możliwości cofnięcia narusza kryterium.
Czy zdarzenie click w JavaScripcie spełnia to kryterium?
Tak, w zwykłym przypadku. W3C zaznacza, że zdarzenie click następuje przy zwolnieniu wskaźnika, więc kto naciśnie, zsunie wskaźnik z kontrolki i puści, niczego nie uruchomi. Dlatego natywne przyciski i linki z obsługą click spełniają kryterium bez dodatkowej pracy.
Kiedy wolno wykonać działanie przy naciśnięciu?
Gdy skutek można przerwać albo cofnąć, gdy zwolnienie go odwraca albo gdy wykonanie przy naciśnięciu jest niezbędne. W3C traktuje jako niezbędne funkcje naśladujące naciśnięcie klawisza klawiatury lub klawiatury numerycznej, a jako dalsze przykłady podaje pianino na ekranie i grę zależną od precyzyjnego wyczucia czasu.
