Skip to content

Commit b5b3da1

Browse files
docs: pas 3.3.3 Foutsuggestie aan op de schrijfwijzer
Summary begint nu positief, intro begint met gewenste ervaring, beveiligingsuitzondering minder prominent, en "detecteren" → "herkennen". Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
1 parent 30b4c91 commit b5b3da1

File tree

2 files changed

+197
-16
lines changed

2 files changed

+197
-16
lines changed

docs/wcag/3.3.03.mdx

Lines changed: 196 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -8,16 +8,26 @@ description: Laat een gebruiker op een toegankelijke manier weten hoe een formul
88
slug: 3.3.3
99
keywords:
1010
- WCAG
11-
- AA
11+
- Niveau AA
1212
- begrijpelijk
1313
- assistentie bij invoer
1414
- understandable
1515
- input assistance
1616
- error suggestion
17+
- foutsuggestie
18+
- formulier
19+
- validatie
20+
- invoerfout
21+
- correctie
22+
- foutmelding
23+
- autocorrectie
24+
- WCAG 3.3.3
25+
- toegankelijkheid
1726
---
1827

1928
{/* @license CC0-1.0 */}
2029

30+
import { Guideline } from "@site/src/components/Guideline";
2131
import { Markdown } from "@site/src/components/Markdown";
2232
import { WcagHeadingGroup } from "@site/src/components/WcagHeadingGroup";
2333
import { SpotlightSection } from "@utrecht/component-library-react/dist/css-module";
@@ -30,10 +40,193 @@ import Summary from "./summaries/_3.3.3-summary.md";
3040
{"WCAG-succescriterium 3.3.3 Foutsuggestie"}
3141
</WcagHeadingGroup>
3242

33-
## Uitleg
34-
3543
<Summary />
3644

45+
Als een formulier weet welk antwoord het verwacht, biedt het bij een fout een suggestie aan. Vult iemand "32 januari" in als datum? Dan meldt het formulier niet alleen "Datum is niet geldig" maar stelt het voor: "Bedoelde je 31 januari of 1 februari?"
46+
47+
Hoe specifieker de suggestie, hoe sneller de bezoeker het formulier correct kan invullen. Bij een wachtwoordveld mag je suggereren welke eis niet is gehaald, zolang je geen gevoelige informatie over geldige wachtwoorden onthult. Vermelden dat een wachtwoord minimaal een bepaald aantal tekens moet hebben mag, want die informatie staat ook op het aanmeldformulier.
48+
49+
## Veelgemaakte fouten
50+
51+
### Foutmelding zonder suggestie terwijl het verwachte formaat bekend is
52+
53+
Het formulier weet welk formaat het verwacht, maar deelt dat niet met de bezoeker. Een datumveld verwacht "dd-mm-jjjj" maar meldt alleen "Ongeldige datum". Een telefoonnummerveld verwacht tien cijfers maar meldt alleen "Ongeldig telefoonnummer". De bezoeker moet raden wat er precies wordt verwacht.
54+
55+
**Hoe te testen:** vul een veld in met een waarde in het verkeerde formaat. Beschrijft de foutmelding welk formaat wordt verwacht? Bevat de melding een voorbeeld?
56+
57+
<Guideline appearance="dont" title="Foutmelding zonder het verwachte formaat.">
58+
```html
59+
<label for="datum">Geboortedatum</label>
60+
<input type="text" id="datum" aria-describedby="datum-fout" aria-invalid="true" />
61+
<p id="datum-fout" class="fout">
62+
Ongeldige datum
63+
</p>
64+
```
65+
</Guideline>
66+
67+
<Guideline appearance="do" title="Foutmelding met het verwachte formaat en een voorbeeld.">
68+
```html
69+
<label for="datum">Geboortedatum</label>
70+
<input type="text" id="datum" aria-describedby="datum-fout" aria-invalid="true" />
71+
<p id="datum-fout" class="fout">
72+
Datum is niet in het juiste formaat. Gebruik dd-mm-jjjj, bijvoorbeeld 15-03-1990
73+
</p>
74+
```
75+
</Guideline>
76+
77+
**Wie kan dit oplossen:** een developer voegt het verwachte formaat en een voorbeeld toe aan de foutmelding.
78+
79+
### Postcode wordt afgekeurd omdat het formaat afwijkt
80+
81+
Een Nederlandse postcode bestaat uit vier cijfers en twee letters. Bezoekers schrijven die op twee manieren: "3512JE" en "3512 JE". Als het formulier alleen het formaat zonder spatie accepteert, krijgt de bezoeker een foutmelding terwijl de postcode correct is. Accepteer beide varianten, of bied een suggestie aan met het verwachte formaat.
82+
83+
**Hoe te testen:** vul een postcode in met en zonder spatie. Worden beide geaccepteerd? Als niet, biedt de foutmelding dan het verwachte formaat aan?
84+
85+
<Guideline appearance="dont" title="Postcode afgekeurd zonder suggestie.">
86+
```html
87+
<label for="postcode">Postcode</label>
88+
<input type="text" id="postcode" value="3512 JE" aria-describedby="postcode-fout" aria-invalid="true" />
89+
<p id="postcode-fout" class="fout">
90+
Ongeldige postcode
91+
</p>
92+
```
93+
</Guideline>
94+
95+
<Guideline appearance="do" title="Beide formaten accepteren.">
96+
```javascript
97+
function normaliseerPostcode(waarde) {
98+
return waarde.replace(/\s/g, "").toUpperCase();
99+
}
100+
```
101+
</Guideline>
102+
103+
<Guideline appearance="do" title="Suggestie met het verwachte formaat als je maar één formaat accepteert.">
104+
```html
105+
<label for="postcode">Postcode</label>
106+
<input type="text" id="postcode" value="3512 JE" aria-describedby="postcode-fout" aria-invalid="true" />
107+
<p id="postcode-fout" class="fout">
108+
Postcode is niet in het juiste formaat. Gebruik het formaat zonder spatie, bijvoorbeeld 3512JE
109+
</p>
110+
```
111+
</Guideline>
112+
113+
**Wie kan dit oplossen:** een developer normaliseert de invoer zodat beide schrijfwijzen worden geaccepteerd, of voegt het verwachte formaat toe aan het label boven het veld en de foutmelding.
114+
115+
### Datum buiten bereik zonder te melden welke datums geldig zijn
116+
117+
Een datumveld accepteert alleen datums binnen een bepaald bereik, maar meldt niet welk bereik geldig is. De bezoeker vult een datum in die te ver in het verleden of in de toekomst ligt en krijgt alleen "Datum buiten bereik". Vermeld de grenzen zodat de bezoeker direct de juiste datum kan kiezen.
118+
119+
**Hoe te testen:** vul een datum in die buiten het geldige bereik valt. Vermeldt de foutmelding het geldige bereik?
120+
121+
<Guideline appearance="dont" title="Geen vermelding van het geldige bereik.">
122+
```html
123+
<label for="afspraak">Datum afspraak</label>
124+
<input type="date" id="afspraak" aria-describedby="afspraak-fout" aria-invalid="true" />
125+
<p id="afspraak-fout" class="fout">
126+
Datum buiten bereik
127+
</p>
128+
```
129+
</Guideline>
130+
131+
<Guideline appearance="do" title="Foutmelding met het geldige bereik.">
132+
```html
133+
<label for="afspraak">Datum afspraak</label>
134+
<input type="date" id="afspraak" aria-describedby="afspraak-fout" aria-invalid="true" />
135+
<p id="afspraak-fout" class="fout">
136+
Kies een datum tussen 1 april 2026 en 30 juni 2026
137+
</p>
138+
```
139+
</Guideline>
140+
141+
**Wie kan dit oplossen:** een developer voegt de grenzen van het geldige bereik toe aan de foutmelding.
142+
143+
### Verplicht veld met alleen de melding "Dit veld is verplicht"
144+
145+
"Dit veld is verplicht" beschrijft een regel, geen oplossing. De bezoeker weet dat er iets moet worden ingevuld, maar niet wat. Bij een naamveld is "Vul je voor- en achternaam in" direct bruikbaar. Bij een selectie is "Kies een bezorgmethode" concreter dan "Dit veld is verplicht".
146+
147+
**Hoe te testen:** laat een verplicht veld leeg en verstuur het formulier. Beschrijft de foutmelding wat je moet invullen, of zegt het alleen dat het veld verplicht is?
148+
149+
<Guideline appearance="dont" title="Generieke melding die alleen de regel herhaalt.">
150+
```html
151+
<label for="naam">Naam</label>
152+
<input type="text" id="naam" aria-describedby="naam-fout" aria-invalid="true" />
153+
<p id="naam-fout" class="fout">
154+
Dit veld is verplicht
155+
</p>
156+
```
157+
</Guideline>
158+
159+
<Guideline appearance="do" title="Specifieke melding die beschrijft wat er wordt verwacht.">
160+
```html
161+
<label for="naam">Naam</label>
162+
<input type="text" id="naam" aria-describedby="naam-fout" aria-invalid="true" />
163+
<p id="naam-fout" class="fout">
164+
Vul je voor- en achternaam in
165+
</p>
166+
```
167+
</Guideline>
168+
169+
**Wie kan dit oplossen:** een developer of contentbeheerder schrijft per veld een specifieke foutmelding die beschrijft wat er verwacht wordt.
170+
171+
### Wachtwoord voldoet niet aan de eisen maar de melding zegt niet welke eis niet is gehaald
172+
173+
Een wachtwoordveld heeft meerdere eisen: minimale lengte, een hoofdletter, een cijfer. De foutmelding zegt alleen "Wachtwoord voldoet niet aan de eisen" zonder te specificeren welke eis niet is gehaald. De bezoeker moet alle eisen opnieuw doorlopen.
174+
175+
**Hoe te testen:** vul een wachtwoord in dat aan sommige eisen voldoet maar niet aan alle. Specificeert de foutmelding welke eis niet is gehaald?
176+
177+
<Guideline appearance="dont" title="Generieke melding zonder specifieke eisen.">
178+
```html
179+
<label for="wachtwoord">Wachtwoord</label>
180+
<input type="password" id="wachtwoord" aria-describedby="ww-fout" aria-invalid="true" />
181+
<p id="ww-fout" class="fout">
182+
Wachtwoord voldoet niet aan de eisen
183+
</p>
184+
```
185+
</Guideline>
186+
187+
<Guideline appearance="do" title="Specifieke melding per eis die niet is gehaald.">
188+
```html
189+
<label for="wachtwoord">Wachtwoord</label>
190+
<input type="password" id="wachtwoord" aria-describedby="ww-fout" aria-invalid="true" />
191+
<ul id="ww-fout" class="fout">
192+
<li>Minimaal 8 tekens (je hebt er nu 5)</li>
193+
<li>Minimaal één cijfer</li>
194+
</ul>
195+
```
196+
</Guideline>
197+
198+
Noem in de foutmelding niet welke tekens wél correct zijn — dat onthult informatie over het wachtwoord.
199+
200+
**Wie kan dit oplossen:** een developer splitst de validatie op in afzonderlijke controles en toont per eis of die is gehaald.
201+
202+
## Hoe te testen
203+
204+
### Voor iedereen
205+
206+
1. Vul een formulier in met waarden in een verkeerd formaat (datum, telefoonnummer, postcode). Biedt de foutmelding het verwachte formaat en een voorbeeld?
207+
2. Typ een waarde met een kleine typefout in een zoekveld of keuzelijst. Biedt het formulier een alternatief aan?
208+
3. Vul een datum in buiten het geldige bereik. Vermeldt de foutmelding welke datums geldig zijn?
209+
4. Controleer wachtwoordvelden. Geeft de foutmelding aan welke specifieke eis niet is gehaald?
210+
211+
### Voor developers
212+
213+
1. Controleer elke foutmelding in het formulier. Bevat de melding een suggestie of voorbeeld als het verwachte formaat of de geldige opties bekend zijn?
214+
2. Test met een screenreader. Worden suggesties voorgelezen samen met de foutmelding? Zijn klikbare suggesties bereikbaar met het toetsenbord?
215+
3. Controleer dat suggesties bij wachtwoordvelden geen informatie onthullen die de beveiliging ondermijnt.
216+
4. Gebruik <span lang="en">axe DevTools</span> voor een eerste scan. Foutsuggesties zijn niet automatisch te herkennen — dit vereist handmatig testen.
217+
218+
## Gerelateerde succescriteria
219+
220+
- [3.3.1 Foutidentificatie](https://nldesignsystem.nl/wcag/3.3.1/): het formulier meldt welk veld fout is en wat er mis is. Foutsuggestie bouwt hierop voort door ook een oplossing aan te bieden.
221+
- [3.3.2 Labels of instructies](https://nldesignsystem.nl/wcag/3.3.2/): duidelijke labels en instructies bij invoervelden voorkomen fouten voordat ze ontstaan. Lees hier meer als je het verwachte formaat al bij het label wilt tonen.
222+
- [3.3.4 Foutpreventie](https://nldesignsystem.nl/wcag/3.3.4/): bij juridische of financiële transacties kan de bezoeker invoer controleren en corrigeren voordat deze definitief wordt verzonden.
223+
224+
## Relevante bronnen
225+
226+
- [WCAG 2.2: Succescriterium 3.3.3 Foutsuggestie](https://www.w3.org/Translations/WCAG22-nl/#foutsuggestie) — de officiële Nederlandstalige vertaling van het succescriterium. Gebruik dit als referentie voor de exacte eisen.
227+
- [Understanding SC 3.3.3: Error Suggestion](https://www.w3.org/WAI/WCAG22/Understanding/error-suggestion.html) — de W3C-uitleg bij het succescriterium, met technieken en voorbeelden (Engels).
228+
- [Accessible form validation](https://www.smashingmagazine.com/2023/02/guide-accessible-form-validation/) — uitgebreide gids van Smashing Magazine over toegankelijke formuliervalidatie, inclusief patronen voor foutsuggesties (Engels).
229+
37230
## Gerelateerde NL Design System-richtlijnen
38231

39232
- Formulieren: [Foutmeldingen](/richtlijnen/formulieren/foutmeldingen).
@@ -59,16 +252,6 @@ Overige bronnen:
59252

60253
<CTAGebruikersonderzoek />
61254

62-
## Hoe te testen
63-
64-
Controleer de foutmeldingen in het formulier:
65-
66-
- De foutmeldingen staan zichtbaar, in tekst, boven het formulierveld.
67-
- De foutmeldingen helpen de gebruiker het veld in te vullen. Ze bevatten informatie over wat het probleem is en hoe dit op te lossen.
68-
- Alleen de tekst "Dit is een verplicht veld" is onvoldoende informatie.
69-
70-
Meer informatie en voorbeelden staan op [Foutmeldingen in een formulier](https://nldesignsystem.nl/richtlijnen/formulieren/foutmeldingen).
71-
72255
## W3C referenties
73256

74257
- Engelse tekst van het WCAG-succescriterium: [<span lang="en">3.3.3 Error Suggestion</span>](https://www.w3.org/TR/WCAG22/#error-suggestion).
Lines changed: 1 addition & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,3 @@
11
<!-- @license CC0-1.0 -->
22

3-
Laat een gebruiker op een toegankelijke manier weten hoe een formulierveld goed in te vullen. Geef hiervoor hints, suggesties en voorbeelden.
4-
5-
Uitzonderingen hierop zijn bijvoorbeeld wachtwoorden, examenvragen of vragen waarvan het niet mogelijk is te weten hoe de fout te corrigeren.
3+
Bezoekers die een formulier invullen krijgen bij een fout een suggestie hoe ze het veld goed kunnen invullen, als de website weet wat het verwachte antwoord is. Zo begrijpt iedereen direct wat er nodig is om verder te gaan, zonder te hoeven gokken.

0 commit comments

Comments
 (0)