Funkcjonalność · Poziom A

2.1.4 Skróty klawiszowe znakowe

Jednoznakowe skróty nie mogą przypadkowo przejmować kontroli nad interfejsem.

Krótko

Jeśli strona używa skrótów z samej litery, cyfry, znaku interpunkcyjnego albo symbolu, użytkownik musi móc je wyłączyć, zmienić na skrót z klawiszem modyfikującym albo używać ich tylko wtedy, gdy dany komponent ma fokus.

Problem w praktyce

Aplikacja pocztowa archiwizuje wiadomość po naciśnięciu litery „a”. Osoba używająca dyktowania mówi zdanie, a system rozpoznawania mowy wysyła znaki do strony. W efekcie wiadomości są przypadkowo archiwizowane.

To kryterium nie dotyczy ogólnej obsługi klawiaturą. Dotyczy skrótów znakowych działających w treści strony, szczególnie takich, które są aktywne globalnie.

Kogo to dotyczy

  • Osób używających sterowania głosem i dyktowania.
  • Osób, które łatwo przypadkowo naciskają pojedyncze klawisze.
  • Użytkowników alternatywnych klawiatur i przełączników.
  • Osób, które potrzebują przewidywalnego trybu pisania w aplikacji webowej.

Dobry przykład

  • Użytkownik może wyłączyć skróty jednoznakowe w ustawieniach.
  • Skrót „s” można zmienić na „Ctrl+Alt+S”.
  • Litery działają tylko w komponencie, który ma fokus, na przykład w edytorze tekstu.
  • Każda funkcja dostępna skrótem ma też zwykły przycisk albo menu.

Zły przykład

  • Litera „d” usuwa element w całej aplikacji i nie da się tego wyłączyć.
  • Cyfra „1” przełącza kartę bez względu na to, gdzie jest fokus.
  • Skróty są opisane w pomocy, ale nie mają ustawień wyłączenia ani zmiany.
  • Użytkownik nie może wykonać funkcji inaczej niż przez jednoznakowy skrót.

Przykłady kodu

Zły przykład: globalny skrót jednoznakowy

Skrót działa zawsze i nie sprawdza ustawień użytkownika.

Kod — JavaScript

document.addEventListener("keydown", event => {
  if (event.key === "d") {
    deleteCurrentMessage();
  }
});

Dobry przykład: skrót można wyłączyć

Mechanizm respektuje ustawienie użytkownika.

Kod — JavaScript

document.addEventListener("keydown", event => {
  if (!settings.characterShortcutsEnabled) return;
  if (event.key === "d") {
    deleteCurrentMessage();
  }
});

Dobry przykład: skrót z modyfikatorem

Skrót nie opiera się wyłącznie na znaku.

Kod — JavaScript

document.addEventListener("keydown", event => {
  if (event.ctrlKey && event.altKey && event.key === "d") {
    deleteCurrentMessage();
  }
});

Przykład graficzny

Źle

D = usuń

Skrót działa globalnie i nie da się go wyłączyć.

Dobrze

Ctrl+Alt+D = usuń

Skrót zawiera modyfikatory albo można go wyłączyć w ustawieniach.

Schemat pokazuje różnicę między ryzykownym skrótem znakowym a bezpieczniejszym mechanizmem.

Jak sprawdzić

  1. Sprawdź dokumentację skrótów i ustawienia aplikacji.
  2. Naciśnij pojedyncze litery, cyfry i znaki poza polami formularza.
  3. Ustal, czy skróty da się wyłączyć albo zmienić na kombinację z modyfikatorem.
  4. Sprawdź, czy skrót działa tylko wtedy, gdy odpowiedni komponent ma fokus.
  5. Nie oceniaj tutaj, czy cała aplikacja jest obsługiwana klawiaturą; to osobny zakres.

Co sprawdzi automat, a czego nie

Automat może wykryć

  • część globalnych nasłuchów keydown,
  • skróty opisane w konfiguracji aplikacji,
  • brak widocznego panelu ustawień w prostych przypadkach.

Automat nie oceni pewnie

  • czy skróty są aktywne tylko przy fokusie komponentu,
  • czy mechanizm wyłączenia działa dla użytkownika,
  • czy skrót rzeczywiście opiera się na znaku w danym układzie klawiatury.

Typowe błędy

  • Globalne skróty „j”, „k”, „m”, „s” bez możliwości wyłączenia.
  • Panel pomocy opisuje skróty, ale nie pozwala ich zmienić.
  • Skróty działają podczas dyktowania tekstu poza polem edycji.
  • W aplikacji mobilnej podłączona klawiatura uruchamia akcje pojedynczym znakiem.