auditmysitev2.0.2

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.

form_heuristics_flagged.htmlHTML
<!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.

input_purpose_name.htmlHTML
<!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.