TODO: PageHeader

Hoofdmenu

WCAG-succescriterium 3.3.1 Foutidentificatie

Niveau A

Een bezoeker die een formulier invult, kan een fout maken. Het formulier geeft aan welk veld de fout bevat en beschrijft in tekst wat er mis is. Zo kan de bezoeker de fout vinden en corrigeren.

Foutmeldingen verschijnen op het moment dat de fout wordt herkend: na het verzenden van het formulier of direct bij het verlaten van een veld. De melding staat bij het veld waar de fout zit, niet alleen in een samenvatting bovenaan de pagina. Een screenreader leest de foutmelding voor in samenhang met het veld, zodat de bezoeker weet welk veld aandacht nodig heeft.

Een rode rand of een icoon alleen is niet voldoende. De foutmelding moet in tekst beschrijven wat er mis is, zodat iedereen de fout kan begrijpen en corrigeren.

Veelgemaakte fouten

Foutmelding beschrijft niet wat er mis is

Een foutmelding bij een invoerveld beschrijft wat er mis is en hoe de bezoeker het kan corrigeren. Een generieke melding als “Dit veld is verplicht” of “Ongeldige invoer” zegt niet wat er wordt verwacht. Bij een e-mailveld is “Geen geldig e-mailadres ingevoerd” direct bruikbaar.

Hoe te testen: vul een formulier bewust fout in en verstuur het. Beschrijft elke foutmelding concreet wat er mis is? Weet je na het lezen van de melding hoe je de fout kunt oplossen?

Niet doen

Generieke foutmelding die niets zegt over het probleem.

<label for="email">E-mailadres</label>
<input type="email" id="email" aria-describedby="email-fout" />
<p id="email-fout" class="fout">
  Ongeldige invoer
</p>

Doen

Specifieke foutmelding die beschrijft wat er mis is.

<label for="email">E-mailadres</label>
<input type="email" id="email" aria-describedby="email-fout" aria-invalid="true" />
<p id="email-fout" class="fout">
  E-mailadres is niet geldig. Gebruik het format naam@voorbeeld.nl
</p>

Wie kan dit oplossen: een developer schrijft specifieke foutmeldingen per validatieregel. Een contentbeheerder levert de teksten aan.

Foutmelding is niet gekoppeld aan het invoerveld

Een foutmelding staat visueel bij het juiste veld, maar is er in de code niet aan gekoppeld. Een screenreader leest de foutmelding dan niet voor wanneer de bezoeker naar het veld navigeert. De bezoeker hoort alleen het label en weet niet dat er een fout is.

Hoe te testen: navigeer met een screenreader naar een veld met een fout. Wordt de foutmelding voorgelezen samen met het label? Inspecteer het veld in de DevTools: heeft het een aria-describedby dat verwijst naar de foutmelding?

Niet doen

Foutmelding staat visueel bij het veld maar is niet gekoppeld.

<label for="postcode">Postcode</label>
<input type="text" id="postcode" />
<p class="fout">Postcode is niet geldig. Gebruik het format 1234 AB</p>

Doen

Foutmelding is via aria-describedby gekoppeld aan het veld.

<label for="postcode">Postcode</label>
<input type="text" id="postcode" aria-describedby="postcode-fout" aria-invalid="true" />
<p id="postcode-fout" class="fout">
  Postcode is niet geldig. Gebruik het format 1234 AB
</p>

Wie kan dit oplossen: een developer koppelt de foutmelding aan het veld met aria-describedby en markeert het veld met aria-invalid="true".

Fout is alleen aangegeven met kleur

Een invoerveld met een fout heeft alleen een rode rand of een rood label. Iemand die kleuren niet kan onderscheiden, ziet geen verschil tussen een veld met en zonder fout. Combineer kleur altijd met een tekst en bij voorkeur een icoon.

Hoe te testen: controleer of de foutmelding in tekst is gegeven. Bekijk het formulier in grijswaarden (gebruik de DevTools-optie “Emulate vision deficiencies” > “Achromatopsia”). Kun je nog zien welke velden een fout bevatten?

Niet doen

Fout alleen aangegeven met een rode rand.

input.fout {
  border-color: red;
}

Doen

Fout aangegeven met kleur, tekst en een icoon.

<label for="naam">Naam</label>
<input type="text" id="naam" class="fout" aria-describedby="naam-fout" aria-invalid="true" />
<p id="naam-fout" class="fout">
  <svg aria-hidden="true" class="fout-icoon"><!-- waarschuwingsicoon --></svg>
  Naam is niet ingevuld
</p>

Wie kan dit oplossen: een developer voegt een tekstuele foutmelding toe naast de kleurverandering.

Foutmeldingen verschijnen alleen bovenaan de pagina

Na het verzenden van een formulier verschijnt een samenvatting van fouten bovenaan de pagina, maar bij de velden zelf staat niets. De bezoeker moet heen en weer scrollen tussen de samenvatting en de velden om te begrijpen wat er mis is. Bij lange formulieren is dat onwerkbaar.

Hoe te testen: verstuur een formulier met meerdere fouten. Staan de foutmeldingen ook bij de individuele velden? Of moet je scrollen naar een samenvatting bovenaan?

Niet doen

Foutmeldingen alleen in een samenvatting bovenaan.

<div class="fout-samenvatting">
  <p>Er zijn 3 fouten gevonden:</p>
  <ul>
    <li>Naam is verplicht</li>
    <li>E-mailadres is ongeldig</li>
    <li>Postcode is verplicht</li>
  </ul>
</div>
<!-- Velden verderop zonder foutmeldingen -->
<label for="naam">Naam</label>
<input type="text" id="naam" />

Doen

Samenvatting bovenaan én foutmeldingen bij de velden.

<div class="fout-samenvatting" role="alert">
  <p>Er zijn 3 fouten gevonden:</p>
  <ul>
    <li><a href="#naam">Naam is niet ingevuld</a></li>
    <li><a href="#email">E-mailadres is niet ingevuld</a></li>
    <li><a href="#postcode">Postcode is niet ingevuld</a></li>
  </ul>
</div>
<!-- Foutmelding ook bij het veld zelf -->
<label for="naam">Naam</label>
<input type="text" id="naam" aria-describedby="naam-fout" aria-invalid="true" />
<p id="naam-fout" class="fout">Naam is niet ingevuld</p>

De links in de samenvatting verwijzen naar de velden, zodat de bezoeker direct naar het juiste veld kan springen.

Wie kan dit oplossen: een developer voegt foutmeldingen toe bij de individuele velden en maakt de samenvatting klikbaar.

Inline validatie markeert een veld als fout terwijl de bezoeker nog bezig is

Inline validatie controleert een veld terwijl de bezoeker nog aan het typen is. Na het eerste karakter van een e-mailadres verschijnt al een foutmelding dat het adres ongeldig is. Dat is verwarrend en frustrerend. Valideer pas nadat de bezoeker het veld heeft verlaten of het formulier heeft verzonden.

Hoe te testen: begin met het invullen van een veld. Verschijnt er al een foutmelding terwijl je nog aan het typen bent?

Niet doen

Validatie bij elke toetsaanslag.

emailVeld.addEventListener("input", () => {
  valideerEmail(emailVeld.value);
});

Doen

Validatie pas bij het verlaten van het veld.

emailVeld.addEventListener("blur", () => {
  valideerEmail(emailVeld.value);
});

Wie kan dit oplossen: een developer wijzigt de validatietrigger van input naar blur of submit.

Hoe te testen

Voor iedereen

  1. Verstuur een formulier met bewust lege of fout ingevulde velden. Verschijnt er bij elk veld met een fout een foutmelding?
  2. Lees de foutmeldingen. Beschrijven ze concreet wat er mis is en in welk invoerveld?

Voor developers

  1. Inspecteer velden met fouten in de DevTools. Heeft elk veld met een fout een aria-invalid="true" en een aria-describedby dat verwijst naar de foutmelding?
  2. Test met een screenreader. Navigeer naar een veld met een fout. Wordt de foutmelding voorgelezen samen met het label?
  3. Controleer of inline validatie niet triggert terwijl de bezoeker nog aan het typen is.
  4. Als er een foutsamenvatting bovenaan staat: controleer of de links naar de individuele velden verwijzen en of de focus naar de samenvatting verplaatst na het verzenden.

Gerelateerde succescriteria

Gerelateerde NL Design System-richtlijnen

Relevante bronnen

Gebruikersonderzoek

Heb je gebruikersonderzoek gedaan dat betrekking heeft op dit succescriterium en wil je dit delen? Kijk eens bij Gebruikersonderzoeken delen op gebruikersonderzoeken.nl.

W3C-referenties

Belangrijk: De richtlijnen van NL Design System zijn geen wettelijke verplichting

De richtlijnen van NL Design System zijn niet wettelijk verplicht en zijn geen vervanging voor de wettelijk geldende WCAG 2.1 specificatie.

Ons doel is om praktische uitleg en voorbeelden te geven die helpen bij het toegankelijk inzetten van de NL Design System componenten, patronen en richtlijnen. We doen dat op basis van een interpretatie van de nieuwe WCAG 2.2 specificatie.

Weten waar je volgens de wet aan moet voldoen? Ga dan naar wat is verplicht van DigiToegankelijk.

Help richtlijn verbeteren

Aanvullingen of opmerkingen?

Deze pagina’s over WCAG worden onderhouden door NL Design System. Heb je aanvullingen of opmerkingen? Deel je mening op GitHub.