WCAG 3.3.3: Sugestie poprawek błędów

Kryterium sukcesu WCAG 2.x 3.3.3, znane jako „Sugestie poprawek błędów”, dotyczy zapewnienia użytkownikom pomocnych wskazówek w przypadku wykrycia błędów w formularzach lub innych miejscach interakcji. Jeśli system automatycznie wykryje błąd we wprowadzonych danych i zna potencjalną poprawkę, musi ją przedstawić użytkownikowi w sposób jasny i zrozumiały, chyba że ujawnienie takiej sugestii zagroziłoby bezpieczeństwu, naruszyło cel działania systemu lub byłoby z innego powodu nieodpowiednie.

Czym jest kryterium sukcesu 3.3.3 (Sugestie poprawek błędów)?

To kryterium ma na celu ułatwienie użytkownikom poprawiania błędnie wprowadzonych danych, co jest szczególnie ważne w formularzach, gdzie pomyłki są częste. Zamiast ogólnego komunikatu typu „Wystąpił błąd”, system powinien oferować konkretne, użyteczne sugestie, które pomogą użytkownikowi zrozumieć, co poszło nie tak i jak to naprawić. Chodzi o to, aby proces poprawiania błędów był jak najmniej frustrujący i efektywny.

Dlaczego to jest ważne? (Wpływ na dostępność)

Implementacja kryterium 3.3.3 ma znaczący wpływ na dostępność i użyteczność stron internetowych, szczególnie dla następujących grup użytkowników:

  • Osoby z zaburzeniami poznawczymi i dysleksją: Mogą mieć trudności z przetwarzaniem informacji, zapamiętywaniem wymagań formatowania lub rozumieniem niejasnych komunikatów o błędach. Konkretne sugestie znacznie ułatwiają im ukończenie zadań.
  • Osoby z ograniczoną sprawnością ruchową: Mogą przypadkowo wprowadzić błędne dane z powodu trudności z precyzyjnym klikaniem lub wpisywaniem. Jasne wskazówki minimalizują liczbę prób i pomyłek.
  • Osoby niewidome lub słabowidzące: Korzystające z czytników ekranu potrzebują jednoznacznych komunikatów. Ogólnikowe błędy są dla nich szczególnie trudne do zinterpretowania bez wizualnych wskazówek. Sugestia poprawki, prawidłowo oznaczona semantycznie, jest natychmiast przekazywana.
  • Osoby starsze: Mogą być mniej zaznajomione z konwencjami internetowymi i potrzebować dodatkowego wsparcia w nawigacji i wypełnianiu formularzy.
  • Wszyscy użytkownicy: Niezależnie od swoich zdolności, każdy użytkownik doceni jasne i pomocne komunikaty o błędach, które skracają czas potrzebny na ukończenie formularza i zmniejszają poziom frustracji.

Skuteczne sugestie poprawek błędów zwiększają współczynnik sukcesu w wypełnianiu formularzy, poprawiają satysfakcję użytkownika i budują zaufanie do witryny.

Wymagania kryterium sukcesu 3.3.3

Zgodnie z WCAG 3.3.3 (Poziom AA), podstawowym wymaganiem jest:

Jeśli błąd wprowadzania jest automatycznie wykrywany, a znane są sugestie dotyczące poprawki, to sugestie te są przedstawiane użytkownikowi, chyba że uniemożliwiłoby to cel zabezpieczenia lub byłoby nieodpowiednie dla tego celu.

Kluczowe aspekty tego wymagania to:

  • Automatyczne wykrywanie: Błąd musi zostać wykryty przez system (np. walidacja formularza).
  • Znane sugestie poprawek: Jeśli system jest w stanie określić, co jest nie tak i jak to naprawić, powinien tę informację przekazać.
  • Prezentacja użytkownikowi: Sugestia musi być widoczna i dostępna dla użytkownika.
  • Wyjątki: W niektórych przypadkach (np. pytanie zabezpieczające „imię panieńskie matki”, gdzie podanie poprawnej odpowiedzi byłoby sprzeczne z celem bezpieczeństwa) sugestia poprawki może zostać pominięta. Ważne jest, aby takie wyjątki były uzasadnione.

Praktyczne wytyczne dotyczące zgodności

Aby spełnić kryterium 3.3.3, należy wdrożyć następujące praktyki:

  • Błędy formatowania: Jeśli oczekiwany jest konkretny format (np. daty, numeru telefonu), a użytkownik wprowadzi coś innego, zasugeruj prawidłowy format.
  • Brakujące dane: Jeśli wymagane pole jest puste, jasno to wskaż i poinformuj, że pole musi zostać wypełnione.
  • Błędy logiczne lub wartościowe: Jeśli wprowadzona wartość jest poza dopuszczalnym zakresem (np. wiek poniżej 0 lub powyżej 150), wyjaśnij, jaki jest prawidłowy zakres.
  • Literówki w sugestiach: W przypadku typowych literówek (np. w adresie e-mail, nazwie miasta), system może zasugerować poprawioną pisownię, ale zawsze z opcją zaakceptowania lub odrzucenia przez użytkownika.
  • Kontekstowe komunikaty: Komunikat o błędzie i sugestia poprawki powinny pojawiać się w bezpośrednim sąsiedztwie pola, którego dotyczą, aby ułatwić szybką korektę.
  • Jasny i prosty język: Unikaj żargonu technicznego. Używaj języka, który jest zrozumiały dla szerokiego grona odbiorców.
  • Dostępność dla technologii wspomagających: Zapewnij, że komunikaty o błędach i sugestie są prawidłowo oznaczane semantycznie (np. za pomocą aria-live="polite" lub aria-describedby), aby były odczytywane przez czytniki ekranu.

Przykłady implementacji

Poprawne implementacje

Przykład 1: Brakujące wymagane pole

Użytkownik pomija wypełnienie wymaganego pola „Imię”.

<label for="imie">Imię:<span class="required" aria-hidden="true">*</span></label>
<input type="text" id="imie" name="imie" aria-required="true" aria-invalid="true" aria-describedby="imie-error">
<span id="imie-error" class="error-message" role="alert"><strong>Błąd:</strong> Pole "Imię" jest wymagane. Proszę podać swoje imię, aby kontynuować.</span>
.error-message {
  color: #c00;
  font-weight: bold;
  display: block;
  margin-top: 5px;
}

input[aria-invalid="true"] {
  border: 2px solid #c00;
}
// Uproszczony przykład walidacji JavaScript
const nameInput = document.getElementById('imie');
const nameError = document.getElementById('imie-error');

function validateName() {
  if (nameInput.value.trim() === '') {
    nameInput.setAttribute('aria-invalid', 'true');
    nameError.textContent = 'Błąd: Pole "Imię" jest wymagane. Proszę podać swoje imię, aby kontynuować.';
    nameError.style.display = 'block';
    // Ustawia fokus na polu błędu dla lepszej nawigacji
    nameInput.focus();
    return false;
  } else {
    nameInput.removeAttribute('aria-invalid');
    nameError.textContent = '';
    nameError.style.display = 'none';
    return true;
  }
}

// Przykład użycia (np. przy próbie wysłania formularza)
// const form = document.querySelector('form');
// form.addEventListener('submit', function(event) {
//   if (!validateName()) {
//     event.preventDefault(); // Zatrzymuje wysłanie formularza
//   }
// });

Przykład 2: Nieprawidłowy format daty

Użytkownik wprowadza datę w formacie niezgodnym z oczekiwaniami.

<label for="data-urodzenia">Data urodzenia (DD-MM-RRRR):</label>
<input type="text" id="data-urodzenia" name="dataUrodzenia" aria-invalid="true" aria-describedby="data-urodzenia-error">
<span id="data-urodzenia-error" class="error-message" role="alert"><strong>Błąd formatu:</strong> Proszę użyć formatu DD-MM-RRRR, np. 31-12-2000.</span>
// Uproszczony przykład walidacji JavaScript
const dateInput = document.getElementById('data-urodzenia');
const dateError = document.getElementById('data-urodzenia-error');

function validateDate() {
  const datePattern = /^d{2}-d{2}-d{4}$/;
  if (!datePattern.test(dateInput.value)) {
    dateInput.setAttribute('aria-invalid', 'true');
    dateError.textContent = 'Błąd formatu: Proszę użyć formatu DD-MM-RRRR, np. 31-12-2000.';
    dateError.style.display = 'block';
    dateInput.focus();
    return false;
  } else {
    dateInput.removeAttribute('aria-invalid');
    dateError.textContent = '';
    dateError.style.display = 'none';
    return true;
  }
}

Przykład 3: Błąd składniowy adresu e-mail

Użytkownik wprowadza adres e-mail bez znaku „@”.

<label for="email">Adres e-mail:</label>
<input type="email" id="email" name="email" aria-invalid="true" aria-describedby="email-error">
<span id="email-error" class="error-message" role="alert"><strong>Błąd:</strong> Adres e-mail musi zawierać znak "@" i domenę (np. uzytkownik@example.com).</span>

Nieprawidłowe implementacje

Przykład 1: Ogólny komunikat o błędzie bez sugestii

<label for="nazwisko">Nazwisko:</label>
<input type="text" id="nazwisko" name="nazwisko">
<p class="error-message">Wystąpił błąd podczas przetwarzania formularza.</p>

W tym przypadku użytkownik otrzymuje ogólny komunikat o błędzie, ale nie wie, które pole jest problematyczne ani jak poprawić błąd. Nie ma sugestii, co należy zrobić.

Przykład 2: Błąd bez wskazania konkretnego miejsca i niejasna sugestia

<label for="telefon">Numer telefonu:</label>
<input type="tel" id="telefon" name="telefon">
<!-- Komunikat o błędzie pojawia się na górze strony, daleko od pola -->
<div role="alert" aria-live="assertive">
  <h3>Błędy w formularzu:</h3>
  <ul>
    <li>Numer telefonu jest nieprawidłowy.</li>
  </ul>
</div>

Chociaż wspomniano o numerze telefonu, komunikat jest oddalony od pola i nadal brakuje konkretnej sugestii, np. „Proszę użyć formatu XXX-XXX-XXX” lub „Numer telefonu powinien zawierać 9 cyfr”. Użytkownicy czytników ekranu mogą go przeoczyć, a osoby z zaburzeniami poznawczymi mogą mieć trudności z powiązaniem błędu z odpowiednim polem.

Najlepsze praktyki i często popełniane błędy

  • Zawsze podawaj konkretne sugestie: Nie poprzestawaj na stwierdzeniu „Wystąpił błąd”. Zawsze wyjaśniaj, co poszło nie tak i jak to naprawić (np. „Wprowadź datę w formacie DD-MM-RRRR”).
  • Kontekstowość komunikatu: Błędy i sugestie poprawek powinny być umieszczone jak najbliżej pola wejściowego, którego dotyczą, najlepiej bezpośrednio pod nim.
  • Wizualne wyróżnienie błędów: Użyj stylizacji CSS (np. czerwonej ramki wokół pola, pogrubionego, czerwonego tekstu komunikatu), aby wizualnie wskazać błędy.
  • Dostępność semantyczna (ARIA):
    • Użyj atrybutu aria-invalid="true" na polach, które zawierają błędy.
    • Połącz komunikat o błędzie z polem formularza za pomocą atrybutu aria-describedby. Zapewnia to, że czytniki ekranu odczytają komunikat o błędzie po fokusowaniu na polu.
    • Dla ogólnych podsumowań błędów na początku formularza, użyj role="alert" lub aria-live="assertive", aby czytniki ekranu natychmiast poinformowały użytkownika o błędach po przesłaniu formularza.
  • Fokus na błędzie: Po przesłaniu formularza i wykryciu błędów, przenieś fokus klawiatury na pierwsze pole z błędem lub na podsumowanie błędów, aby użytkownik od razu wiedział, gdzie zacząć poprawki.
  • Unikaj automatycznych poprawek bez zgody: Nie poprawiaj automatycznie danych wprowadzonych przez użytkownika, chyba że są to drobne, niezagrażające funkcjonalności literówki (np. automatyczne usunięcie nadmiarowych spacji). Zawsze daj użytkownikowi możliwość weryfikacji i zaakceptowania sugerowanej poprawki.
  • Jasny i prosty język: Komunikaty powinny być łatwe do zrozumienia dla każdego. Unikaj branżowego żargonu.
  • Testowanie: Regularnie testuj swoje formularze z różnymi technologiami wspomagającymi (np. czytnikami ekranu, powiększaniem ekranu), aby upewnić się, że sugestie poprawek błędów są skutecznie przekazywane i zrozumiałe.
  • Pamiętaj o wyjątkach: W sytuacjach, gdzie ujawnienie poprawki mogłoby zagrozić bezpieczeństwu (np. odpowiedzi na pytania bezpieczeństwa, hasła), możesz pominąć konkretne sugestie. Należy to jednak robić z rozwagą i tylko, gdy jest to absolutnie konieczne i uzasadnione.

Podsumowanie

Zapewnienie skutecznych sugestii poprawek błędów (WCAG 3.3.3) jest kluczowe dla tworzenia dostępnych i użytecznych interfejsów. Poprawne wdrożenie tego kryterium nie tylko pomaga użytkownikom z niepełnosprawnościami w pomyślnym wypełnianiu zadań, ale także znacząco poprawia ogólne doświadczenie wszystkich użytkowników witryny. Pamiętaj, aby komunikaty były jasne, konkretne, kontekstowe i dostępne dla technologii wspomagających, zawsze oferując użytkownikowi realną pomoc w rozwiązywaniu problemów.

Przegląd prywatności

Ta strona korzysta z ciasteczek, aby zapewnić Ci najlepszą możliwą obsługę. Informacje o ciasteczkach są przechowywane w przeglądarce i wykonują funkcje takie jak rozpoznawanie Cię po powrocie na naszą stronę internetową i pomaganie naszemu zespołowi w zrozumieniu, które sekcje witryny są dla Ciebie najbardziej interesujące i przydatne.