Requires that changing a control, such as a select list or check box, does not cause a change of context unless users were told in advance.
People change a drop-down, tick a box or type in a field without expecting the page to react. If choosing an option instantly loads another page or submits the form, users who navigate with the keyboard, or who are still scrolling through the options, are thrown off before they have finished.
This criterion requires that changing the setting of any user interface component does not automatically cause a change of context, unless the user has been advised of the behaviour before using the component.
Keyboard users, who change the value of a list by moving through it with the arrow keys and trigger every change. Screen reader users, who cannot see the page change. People with low vision who see only part of the screen. People with cognitive disabilities who need predictable behaviour. People with motor disabilities who change a setting by accident.
The European Accessibility Act (Directive (EU) 2019/882) applies to in-scope products and services placed on the market after 28 June 2025. Recital 47 names four principles for websites and mobile applications: perceivable, operable, understandable and robust. Predictable behaviour on input is part of "understandable".
The technical counterpart is the standard EN 301 549, which incorporates WCAG 3.2.2 by reference and turns it into separate clauses for each kind of ICT.
| Clause | Type of ICT | What it requires |
|---|---|---|
| 9.3.2.2 | Web pages | Web content must satisfy WCAG success criterion 3.2.2. |
| 10.3.2.2 | Non-web documents (PDF, Office files) | Documents must not change context when a control setting changes, where the standard applies the criterion to them. |
| 11.3.2.2 | Non-web software (native mobile apps) | Software must not change context automatically when the setting of a control changes. |
Whether and how the criterion applies to non-web documents is stated in clause 10 of the standard. Clause numbers follow the "9. + WCAG number" pattern of EN 301 549. In V3.2.1 the software clause is divided into further subclauses for open and closed functionality. Check the exact numbers in the standard when you cite them.
Standard version: EN 301 549 V4.1.1 (September 2026) is based on WCAG 2.2 and is the first version prepared specifically for the EAA. It has not yet been cited in the Official Journal of the European Union, so for now it is best treated as a voluntary technical route to the EAA's requirements. Once cited, it will give a presumption of conformity. The text of criterion 3.2.2 is the same in WCAG 2.1 and 2.2.
A note on EAA scope: Article 2(4) of the Directive excludes certain content from the requirements, for example office file formats published before 28 June 2025 and archives that are not updated after that date. Content you publish or change after that date is not covered by these exclusions.
Directive (EU) 2019/882, EUR-Lex, opens in a new tab
A keyboard user who arrows through the options is sent away at the first one. Add a button (H84).
<select onchange="location.href=this.value">
<option value="/en">English</option>
<option value="/tr">Türkçe</option>
</select><label for="lang">Language</label>
<select id="lang">
<option value="/en">English</option>
<option value="/tr">Türkçe</option>
</select>
<button type="button" onclick="location.href=lang.value">Go</button>Automatic submission without warning fails (F36). Let the user submit.
lastField.addEventListener("input", () => form.submit());<form>
…
<button type="submit">Submit</button>
</form>Opening a new window when a selection changes fails without prior warning (F37).
<input type="radio" name="mirror" onchange="window.open(this.value)"><input type="radio" name="mirror" id="m1" value="/dl/1"> <label for="m1">Mirror 1</label>
<button type="button">Download from selected mirror</button>If the setting must trigger a change, say so before the control.
<select onchange="reloadInLanguage(this.value)">…</select><p id="note">Choosing a language reloads the page.</p>
<label for="lang">Language</label>
<select id="lang" aria-describedby="note" onchange="reloadInLanguage(this.value)">…</select>Filtering a list in place, without moving focus, is a content change that is allowed.
<select onchange="location.href='/results?color='+this.value">…</select><label for="color">Colour</label>
<select id="color">…</select>
<ul id="results" aria-live="polite">…</ul>
<script>
color.addEventListener("change", () => updateResultsInPlace(color.value));
</script>Moving focus to another place when a box is ticked disorients users.
agree.addEventListener("change", () => submitBtn.focus());<input type="checkbox" id="agree"> <label for="agree">I agree</label>
<button type="submit">Continue</button>On mobile, pickers, toggles and segmented controls often navigate right away. Either wait for an explicit action, or tell the user in advance.
import SwiftUI
struct LanguageSettings: View {
@State private var language = "en"
var body: some View {
VStack {
Picker("Language", selection: $language) {
Text("English").tag("en")
Text("Türkçe").tag("tr")
}
// The change is applied by an explicit action, not by choosing an option
Button("Apply") { applyLanguage(language) }
}
}
}import androidx.compose.foundation.layout.Row
import androidx.compose.material3.*
import androidx.compose.runtime.*
@Composable
fun NotificationsSetting(onApplied: (Boolean) -> Unit) {
var enabled by remember { mutableStateOf(false) }
Row {
Text("Email notifications")
// The switch changes the setting only; it does not navigate
Switch(checked = enabled, onCheckedChange = { enabled = it })
}
Button(onClick = { onApplied(enabled) }) { Text("Save") }
// Avoid: onCheckedChange = { startActivity(...) }
}onchange, change and input handlers that call submit(), window.open(), location or focus().