Simple Form Validation Using Only WAI-ARIA role=alert or aria-live=assertive

These live examples are based on the W3C WCAG WG ARIA Technique: Using ARIA Live Regions or role=alert to Identify Errors. There are three different examples to demonstrate the differences in browser/AT support.


The purpose of this technique is to notify Assistive Technologies (AT) when an input error occurs. The aria-live attribute makes it possible for an AT (such as a screen reader) to be notified when error messages are injected into a Live Region container. The content within the aria-live region is automatically read by the AT, without the AT having to focus on the place where the text is displayed.

In all examples there is an empty error message container element with aria-atomic=true and an aria-live property or alert role present in the DOM on page load. The error container must be present in the DOM on page load for the error message to be spoken by most screen readers. aria-atomic=true is necessary to make Voiceover on iOS read the error messages after more than one invalid submission. jQuery is used to test if the inputs are empty on submit and inject error messages into the live region containers if so. Each time a new submit is attempted the previous error messages are removed from the container and new error messages injected.

OS/UA/AT Support

Support Notes

When using Firefox with JAWS and NVDA role=alert is announced as "Alert" and aria-live=assertive does not include that extra text. There is NO support for NVDA 2013.1 + IE 8. The third example uses BOTH role=alert & aria-live=assertive on the error container for wider UA/AT support working in all combinations listed.

There are different methods to display an alert or assertive live region on the page and depending on how you create the error container or inject the error messages determines if it will work in the more difficult browsers/screen reader combinations like IE 8 + JAWS 14 or VoiceOver + Safari. Read more about UA/AT support issues here: HTML5 Accessibility Chops: ARIA role=alert browser support.

Injecting error messages into a container with role=alert already present in the DOM

Injecting error messages into a container with aria-live=assertive already present in the DOM

Injecting error messages into a container with BOTH role=alert & aria-live=assertive already present in the DOM