Přejít na obsah
Pandus

Přístupná validace formulářů a chybové hlášky

Aktualizováno 14. října 2026 · Čtení na 5 min

V pokladně a registračních formulářích e-shopy ztrácejí zákazníky a práce s chybami je místo, kde formuláře nejčastěji selhávají u lidí se čtečkou obrazovky, lupou nebo klávesnicí. Pravidlo je jednoduché: řekněte, co je špatně, textem, u pole, a postarejte se, aby to asistivní technologie ohlásila. Stránka je součástí série přístupné vzory UI.

Související kritéria WCAG

Příklad kódu

<form novalidate>
  <div id="error-summary" tabindex="-1" aria-labelledby="error-summary-title" hidden>
    <h2 id="error-summary-title">2 chyby ve formuláři</h2>
    <ul>
      <li><a href="#email">E-mail: zadejte adresu ve tvaru [email protected]</a></li>
      <li><a href="#postcode">PSČ: zadejte ho ve tvaru 110 00</a></li>
    </ul>
  </div>

  <label for="email">E-mail</label>
  <input id="email" type="email" autocomplete="email"
         aria-invalid="true" aria-describedby="email-error">
  <p id="email-error" class="error">
    <span aria-hidden="true">⚠</span> Zadejte adresu ve tvaru [email protected]
  </p>

  <label for="postcode">PSČ <span class="hint" id="postcode-hint">(například 110 00)</span></label>
  <input id="postcode" autocomplete="postal-code"
         aria-invalid="true" aria-describedby="postcode-hint postcode-error">
  <p id="postcode-error" class="error">Zadejte PSČ ve tvaru 110 00</p>

  <button type="submit">Pokračovat k platbě</button>
</form>

Jak to funguje:

  • Text u pole. Každá zpráva je viditelný text propojený přes aria-describedby, takže se čte spolu s polem. aria-invalid="true" označí pole jako neplatné; je to technika W3C ARIA21 „Using aria-invalid to Indicate An Error Field“.
  • Souhrn chyb po odeslání. Nahoře zobrazte souhrn s odkazy na pole a přesuňte na něj fokus (má tabindex="-1", aby fokus mohl dostat), nebo přesuňte fokus na první neplatné pole. Pokud fokus nepřesouváte, oznamte chyby živou oblastí; to je technika W3C ARIA19 „Using ARIA role=alert or Live Regions to Identify Errors“. Nedělejte obojí, jinak se zpráva přečte dvakrát.
  • Průběžná validace při psaní má být střídmá: ověřujte, když uživatel pole opustí, ne při každém stisku klávesy, a chybu odstraňte, jakmile je opravená.
  • Zachovejte data. Po neúspěšném odeslání nechte vše, co uživatel zadal.
  • Nativní validace prohlížeče (required, type="email") funguje také, ale její zprávy a vzhled se liší podle prohlížeče a jazyka; mnoho e-shopů používá novalidate a vlastní zprávy v jazyce stránky.

Klávesnice a chování fokusu

Akce Očekávaný výsledek
Odeslání s chybami Fokus se přesune na souhrn chyb (nebo první neplatné pole); čtečka obrazovky ho přečte
Enter na odkazu v souhrnu Fokus se přesune na pole; přečte se popisek, neplatný stav a zpráva
Tab z pole s chybou (průběžná validace) Zpráva se objeví jako text; oznámí se přes aria-describedby při dalším fokusu na pole, nebo jako stavová zpráva
Oprava pole aria-invalid se odstraní; zpráva zmizí

Časté chyby v e-shopech

  • Jen červené ohraničení neplatného pole, nebo červená hvězdička bez textu.
  • Chyby jako toast nahoře na obrazovce, který po třech sekundách zmizí a nikdy se neoznámí.
  • Obecné zprávy („Neplatný vstup“, „Chyba“) bez nápovědy, jaký formát se očekává.
  • Placeholder jako jediný popisek a nápověda formátu, který zmizí, jakmile uživatel začne psát.
  • Zprávy nepropojené s poli, takže uživatelé čteček slyší popisek a nic víc.
  • Tlačítko odeslání zakázané, dokud není formulář platný, což problém skrývá místo toho, aby ho vysvětlilo; viz neaktivní tlačítka.
  • Iframy platebních poskytovatelů s vlastními nepopsanými poli a chybami jen v angličtině v lokalizovaném obchodě.
  • Formulář se po chybě na serveru vymaže, včetně doručovací adresy.

Co najde automatizovaná kontrola a co ruční testování

Automaticky (pravidlo axe-core) Co najde
label, select-name Pole bez popisku
label-title-only Pole označená jen pomocí title nebo aria-describedby (doporučení)
form-field-multiple-labels Pole s více než jedním popiskem
autocomplete-valid Neplatné hodnoty autocomplete u polí s osobními údaji (1.3.5)
aria-valid-attr-value aria-describedby odkazující na neexistující ID, neplatné hodnoty aria-invalid
color-contrast Chybový text s nízkým kontrastem, pokud je viditelný
frame-title Platební iframy bez titulku

Všechna jsou kartami v naší knihovně pravidel. Automatická kontrola vidí formulář v jeho počátečním stavu; neodesílá ho. Testujte ručně: odešlete prázdné i chybné hodnoty a ověřte, že je každá chyba popsaná textem, propojená s polem, oznámená čtečkou obrazovky a čitelná při zvětšení na 200 %. S rozšířením prohlížeče můžete automatická pravidla spustit znovu, když jsou chyby na obrazovce. Postup najdete v článku jak testovat WCAG.

Spusťte bezplatnou kontrolu jedné stránky na pokladně nebo kontaktní stránce. Je to automatizovaná kontrola, nikoli úplný audit.

Časté otázky

Co WCAG vyžaduje u chyb formulářů?

Kritérium 3.3.1 Identifikace chyb (A): pole s chybou je identifikováno a chyba je popsána textem. Kritérium 3.3.3 Návrh opravy chyby (AA): pokud je oprava známá, navrhněte ji. Kritérium 4.1.3 Stavové zprávy (AA): zprávy, které se objeví bez přesunu fokusu, asistivní technologie oznámí.

Stačí k označení chyby červené ohraničení?

Ne. W3C uvádí, že barvu lze použít navíc, ale chyba musí být identifikována i textem. Samotné červené ohraničení selže u lidí, kteří barvy nerozlišují, i u uživatelů čteček obrazovky.

Jak propojit chybovou zprávu s polem?

Dejte zprávě id, odkažte na ni z pole přes aria-describedby a na poli nastavte aria-invalid="true" (technika W3C ARIA21). Čtečka obrazovky pak přečte popisek, neplatný stav i zprávu.

Má se fokus přesunout na první chybu?

Po odeslání je běžný a spolehlivý postup přesunout fokus na souhrn chyb nebo na první neplatné pole. Pokud se fokus nepřesune, musí být zpráva typu „3 chyby ve formuláři“ stavovou zprávou, aby se oznámila.

Dokáže automatizovaná kontrola otestovat chyby formuláře?

Zkontroluje formulář v počátečním stavu: popisky, hodnoty autocomplete, platné odkazy ARIA a kontrast. Formuláře neodesílá, takže zda se chyby objeví, jsou popsané textem a jsou oznámené, je nutné otestovat ručně.

Zdroje

  • W3C, Understanding 3.3.1 Error Identification: https://www.w3.org/WAI/WCAG22/Understanding/error-identification.html
  • W3C, Understanding 3.3.3 Error Suggestion: https://www.w3.org/WAI/WCAG22/Understanding/error-suggestion.html
  • W3C, Understanding 4.1.3 Status Messages: https://www.w3.org/WAI/WCAG22/Understanding/status-messages.html