Missing input purpose identification
forms/purpose-missing
- WCAG success criterion
- 1.3.5 (level AA)
- Outcome class
- Hint only. An automated check that by design reports review hints only: its findings are marked for manual review, never as confirmed violations.
- Area
- Accessibility, Forms & Interaction
- Default severity
- medium
- axe-core rule
autocomplete-valid
Why we flag this
No autofill possible, data entry more error-prone.
Missing autocomplete attributes.
What the rule checks
Scope. Rendered text, email, tel, url and password inputs outside role=search and role=combobox.
Expectation. Needs review when a field seems to collect information about the user (type email or tel; a label, id or name naming e-mail, phone, address, postal code, birth date, password, or the person's name) and has no autocomplete token (missing, empty, on or off). Whether the field really concerns the user is a guess, so never a confirmed violation. The name of a thing ("Project name", "Name" of a saved view, "Dateiname"), technical addresses ("IP address"), "tel" inside "Hotel" and search boxes are not reported. A field with a valid token is not reported.
Source. WCAG 2.2 SC 1.3.5 Identify Input Purpose, section 7 Input Purposes for User Interface Components
Detection: shared; needs dom, ax_tree.
Failing example
The check flags this for review. Corpus case form_heuristics_flagged, element input#dob. The page may contain further findings for other rules.
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="utf-8">
<title>Form heuristics: true positives (#643)</title>
<meta name="viewport" content="width=device-width, initial-scale=1"><style>
/* #783: page shell, so the case only reports what it is about */
.skip, nav a { display: inline-block; padding: 12px; min-height: 44px; min-width: 44px; box-sizing: border-box; }
button, input, select, textarea { min-height: 44px; min-width: 44px; box-sizing: border-box; }
input[type="checkbox"], input[type="radio"] { width: 44px; height: 44px; }
</style>
</head>
<body>
<a class="skip" href="#main">Skip to main content</a>
<header><p>Example Shop</p><nav aria-label="Main"><a href="/" aria-current="page">Home</a> <a href="/help">Help</a></nav></header>
<main id="main">
<h1>Registration form</h1>
<form>
<!-- Date field without any instruction: still reported, but as
needs review (the format requirement is guessed from the
label), never as a confirmed violation -->
<label for="dob">Date of birth</label>
<input type="text" id="dob" name="dob">
<!-- Two related checkboxes (same name) without fieldset/legend -->
<p>Interests</p>
<label><input type="checkbox" name="interests" value="news"> News</label>
<label><input type="checkbox" name="interests" value="events"> Events</label>
<button type="submit">Register</button>
</form>
</main>
<footer><p>Example Shop, 2026</p></footer>
</body>
</html>Passing example
The check passes here and reports nothing. Corpus case input_purpose_name, element input#view-name. The page may contain further findings for other rules.
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="utf-8">
<title>Input purpose: a person's name vs. the name of a thing (#658)</title>
<meta name="viewport" content="width=device-width, initial-scale=1"><style>
/* #783: page shell, so the case only reports what it is about */
.skip, nav a { display: inline-block; padding: 12px; min-height: 44px; min-width: 44px; box-sizing: border-box; }
button, input, select, textarea { min-height: 44px; min-width: 44px; box-sizing: border-box; }
input[type="checkbox"], input[type="radio"] { width: 44px; height: 44px; }
</style>
</head>
<body>
<a class="skip" href="#main">Skip to main content</a>
<header><p>Example Shop</p><nav aria-label="Main"><a href="/" aria-current="page">Home</a> <a href="/help">Help</a></nav></header>
<main id="main">
<h1>Save the view</h1>
<!-- The name a user gives a saved grid view: not about the user -->
<form>
<label for="view-name">Name</label>
<input id="view-name" type="text" placeholder="My view">
<label for="project-title">Project name</label>
<input id="project-title" type="text">
<label for="upload-target">Dateiname</label>
<input id="upload-target" type="text">
<!-- "tel" inside "Hotel" is no phone field -->
<label for="stay">Hotel</label>
<input id="stay" type="text">
<button type="submit">Save the view</button>
</form>
<!-- Fields that ask for the person's name, without autocomplete -->
<form>
<label for="your-name">Your name</label>
<input id="your-name" type="text">
<label for="given">Vorname</label>
<input id="given" type="text">
<label for="phone-de">Telefonnummer</label>
<input id="phone-de" type="text">
<label for="zip-de">Postleitzahl</label>
<input id="zip-de" type="text">
<button type="submit">Send</button>
</form>
</main>
<footer><p>Example Shop, 2026</p></footer>
</body>
</html>This page is generated from the rule catalogue and the rule contracts; see therule overview for how the outcome classes are derived.