Testing aria-invalid

aria-invalid="false"

Used when the there are no detected errors in the value. This is the default.

HTML markup
<label for="aaa">Name</label>
<input id="aaa" aria-invalid="false">

aria-invalid="true"

Used when the value entered by the user has failed validation.

HTML markup
<label for="bbb">Name</label>
<input id="bbb" aria-invalid="true">

aria-invalid="grammar"

Used when a grammatical error was detected.

HTML markup
<label for="ccc">Name</label>
<input id="ccc" aria-invalid="grammar">

aria-invalid="spelling"

Used when a spelling error was detected.

HTML markup
<label for="ddd">Name</label>
<input id="ddd" aria-invalid="spelling">

A note on grammar and spelling

Current support: aria-invalid="grammar" and aria-invalid="spelling" are recognised by modern browsers and assistive technologies. However, support is inconsistent: VoiceOver and NVDA announce the specific error type, while JAWS announces only a generic invalid state and does not distinguish between grammar, spelling and other validation errors.

Invalid value

Any value other than false, true, grammar or spelling is not recognised by the ARIA specification.

HTML markup
<label for="eee">Name</label>
<input id="eee" aria-invalid="yes">

Empty value

An empty aria-invalid attribute is not a recognised value and will be flagged as invalid.

HTML markup
<label for="fff">Name</label>
<input id="fff" aria-invalid="">