Skip to main content

EAA-Compliant Contact Form: A Checklist for Web Developers

Information about the article

Portrait of Dmitry Dugarev wearing glasses in a black shirt and smiling

Author: Dmitry Dugarev

Consultant for digital accessibility & IT compliance

Last updated on:

Forms are the most crucial interaction points on your website. Therefore, it is essential that they are accessible to all users—regardless of their abilities or the technologies used. This checklist, taken from my complete guide to accessible forms, helps you review the most important accessibility aspects of your forms.

Checklist for Basic Structure & Instructions

  • Does every form field have a permanently visible <label> element? [1]
  • Is the <label> element positioned before the associated input field? [2]
  • Is every <label> linked to the id of the associated field via the for attribute? [3]
  • Are the IDs of all form elements on the page unique? [4]
  • Are there general instructions before the form (e.g., regarding the designation of mandatory fields) and/or an error summary? [5]
  • Are mandatory fields visually (e.g., *) AND programmatically (required, aria-required="true") marked? [6]
  • Do all interactive elements (buttons, links, radio buttons, checkboxes) have a minimum clickable area of 24x24 CSS pixels? [7]
  • Is there no horizontal scrolling at small screen sizes (e.g., 320px width)? [8]

Keyboard Operability

  • Is the focus order logical and intuitive when navigating with the Tab key? [9]
  • Is the keyboard focus (e.g., the outline) clearly visible at all times and does it have sufficient contrast? [10]

Grouping of Input Fields

  • Are all groups of radio buttons and checkboxes mandatorily enclosed in a <fieldset>? [11]
  • Do these <fieldset> groups have a meaningful <legend> which poses the "question" to the group? [12]
  • Are strongly related text fields (e.g., "First Name & Last Name" or a "Billing Address") also grouped (as best practice) in a <fieldset> with <legend>?

Help Texts & Input Support

  • Do fields with specific format requirements have a visible help text? [1]
  • Is this help text linked to the field via aria-describedby? [13]
  • Do all fields that request personal or known data (Name, E-Mail, Phone, Address) have the correct autocomplete attribute? [14], [15]
  • Are placeholder attributes only used supplementarily and do not contain essential information? [16]
  • Do all placeholder attributes have sufficient contrast (at least 4.5:1) and are they recognizable as help text (e.g., through italics)? [17]

Error Handling

  • Is the browser's default validation suppressed with novalidate?
  • Does an error summary appear at the beginning of the form upon an error? [6]
  • Does the summary container have role="alert" and tabindex="-1"? [18]
  • Is the focus programmatically set to the summary upon an error? [6]
  • Does the summary contain clickable links that correctly jump to the respective field (or to the first element of a group like radio buttons)? [19]
  • Are the link texts in the summary precise and helpful (e.g., by using data-errorsummary-label for long checkbox texts)?
  • Is a specific inline error message displayed for every faulty field? [20]
  • Does every faulty field dynamically receive the attribute aria-invalid="true"? [21]
  • Is the <label> or <legend> of a faulty field marked both with color and with a textual prefix (e.g., "Error: ")? [22]
  • Are all error messages, aria-invalid attributes, and label error states (prefix/color) removed upon a new check (e.g., resetErrors())? [20]

After Submission

As soon as the user submits the form, they should be informed about the status of the submission process—whether through a redirect, a success message, or an error message.

Submission Status

  • Is the "Send" button immediately disabled after the click (and successful validation) to prevent double submissions? [23]
  • Is the "Busy" state displayed visually (e.g., "Sending...", spinner)?
  • Is the "Busy" state programmatically announced via an aria-live region (role="status")? [24]

Final Status (if no redirection occurs)

  • Is a success or server error message displayed in a role="alert" region? [18]
  • Is the keyboard focus programmatically set to the start of this message (.focus()) as soon as it appears?
  • Is the form hidden upon success to prevent confusion?
  • Does the final status message contain a visible button (e.g., "Fill out again" / "Try again") to reset the form?
  • After clicking the reset button, is the form reset, the status message hidden, and the form displayed again?
  • Is the focus programmatically set to the first field of the form after resetting?
  • Is the Send button reactivated (or remains active) upon a server error so that the user can try again? [23]

Conclusion

The accessibility of forms is crucial to ensure that all users can interact with your website without problems. Use this checklist to review your forms and ensure they comply with the best accessibility practices. For a detailed explanation and further tips, I recommend reading my complete guide to accessible forms.

Disclaimer

The content of this checklist is for informational purposes only and does not constitute legal advice. While I strive to provide accurate and current information, I make no guarantee as to the completeness, accuracy, or timeliness of the information provided. Compliance with accessibility standards may vary depending on the specific context and use case. It is recommended to seek professional advice when implementing accessible forms and to conduct regular testing with real users to ensure that the requirements of the WCAG 2.2 guidelines are met. I am not liable for damages or losses resulting from the use of or reliance on the information contained in this guide.

  1. W3C, “Success Criterion 3.3.2 Labels or Instructions,” 2023, [Online]. Available: https://www.w3.org/TR/WCAG22/#labels-or-instructions
  2. W3C, “G162: Positioning labels to maximize predictability of relationships,” 2023, [Online]. Available: https://www.w3.org/WAI/WCAG22/Techniques/general/G162
  3. W3C, “H44: Using label elements to associate text labels with form controls,” 2023, [Online]. Available: https://www.w3.org/WAI/WCAG22/Techniques/html/H44
  4. W3C, “H93: Ensuring that id attributes are unique on a web page,” 2023, [Online]. Available: https://www.w3.org/WAI/WCAG22/Techniques/html/H93
  5. W3C, “G93: Providing open (always visible) captions,” 2023, [Online]. Available: https://www.w3.org/WAI/WCAG22/Techniques/general/G93
  6. W3C, “G83: Providing text descriptions to identify required fields that were not completed,” 2023, [Online]. Available: https://www.w3.org/WAI/WCAG22/Techniques/general/G83
  7. W3C, “Success Criterion 2.5.8 Target Size (Minimum),” 2023, [Online]. Available: https://www.w3.org/TR/WCAG22/#target-size-minimum
  8. W3C, “Success Criterion 1.4.10 Reflow,” 2023, [Online]. Available: https://www.w3.org/TR/WCAG22/#reflow
  9. W3C, “Success Criterion 2.4.3 Focus Order,” 2023, [Online]. Available: https://www.w3.org/TR/WCAG22/#focus-order
  10. W3C, “Success Criterion 2.4.7 Focus Visible,” 2023, [Online]. Available: https://www.w3.org/TR/WCAG22/#focus-visible
  11. W3C, “Success Criterion 1.3.1 Info and Relationships,” 2023, [Online]. Available: https://www.w3.org/TR/WCAG22/#info-and-relationships
  12. W3C, “H71: Providing a description for groups of form controls using fieldset and legend elements,” 2023, [Online]. Available: https://www.w3.org/WAI/WCAG22/Techniques/html/H71
  13. W3C, “ARIA1: Using the aria-describedby property to provide a descriptive label for user interface controls,” 2023, [Online]. Available: https://www.w3.org/WAI/WCAG22/Techniques/aria/ARIA1
  14. W3C, “H98: Using HTML autocomplete attributes,” 2023, [Online]. Available: https://www.w3.org/WAI/WCAG22/Techniques/html/H98
  15. W3C, “Success Criterion 1.3.5 Identify Input Purpose,” 2023, [Online]. Available: https://www.w3.org/TR/WCAG22/#identify-input-purpose
  16. W3C, “F82: Failure of Success Criterion 3.3.2 by visually formatting a set of phone number fields but not including a text label,” 2023, [Online]. Available: https://www.w3.org/WAI/WCAG22/Techniques/failures/F82
  17. W3C, “Success Criterion 1.4.3 Contrast (Minimum),” 2023, [Online]. Available: https://www.w3.org/TR/WCAG22/#contrast-minimum
  18. W3C, “ARIA19: Using ARIA role=alert or Live Regions to Identify Errors,” 2023, [Online]. Available: https://www.w3.org/WAI/WCAG22/Techniques/aria/ARIA19
  19. W3C, “G139: Creating a mechanism that allows users to jump to errors,” 2023, [Online]. Available: https://www.w3.org/WAI/WCAG22/Techniques/general/G139
  20. W3C, “G85: Providing a text description when user input falls outside the required format or values,” 2023, [Online]. Available: https://www.w3.org/WAI/WCAG22/Techniques/general/G85
  21. W3C, “ARIA21: Using aria-invalid to Indicate An Error Field,” 2023, [Online]. Available: https://www.w3.org/WAI/WCAG22/Techniques/aria/ARIA21
  22. W3C, “Success Criterion 1.4.1 Use of Color,” 2023, [Online]. Available: https://www.w3.org/TR/WCAG22/#use-of-color
  23. W3C, “Success Criterion 3.3.4 Error Prevention (Legal, Financial, Data),” 2023, [Online]. Available: https://www.w3.org/TR/WCAG22/#error-prevention-legal-financial-data
  24. W3C, “Success Criterion 4.1.3 Status Messages,” 2023, [Online]. Available: https://www.w3.org/TR/WCAG22/#status-messages

About the author

Portrait of Dmitry Dugarev wearing glasses in a black shirt and smiling

Best regards,

Dmitry Dugarev

Founder of Barrierenlos℠ and developer of the Semanticality™ plugin. With a master’s degree, over 8 years of experience in web-development & IT-Compliance at Big Four, Bank and Enterprise, and more than 1,000 web pages tested for accessibility for over 50 clients, I help web teams implement accessibility in a structured way — without months of redevelopment.

Become an EAA Expert Developer yourself - in just 4 days.

Learn in our 4-day workshop how to conduct complex audits and develop accessible components yourself. Get a personalized learning plan, 1:1 strategy coaching, and a certificate.

Register for the EAA Workshop now