Provide Control Over Single-Character Key Shortcuts
If a keyboard shortcut is implemented using only letter (including upper- and lower-case), punctuation, number, or symbol characters, then at least one of the following must be true:
- Turn off: A mechanism is available to turn the shortcut off.
- Remap: A mechanism is available to remap the shortcut to use one or more non-printable keyboard characters (e.g., Ctrl, Alt, Cmd).
- Active only on focus: The shortcut for a user interface component is only active when that component has focus.
Why It Matters
Speech input users may accidentally trigger single-character shortcuts while dictating text, leading to unexpected actions. Users with motor tremors might press keys unintentionally. Requiring modifier keys (Ctrl, Alt, Cmd) or limiting shortcuts to when a component is focused prevents these accidental activations.
Fixing the Issue
Avoid implementing single-character key shortcuts if possible. If they are used:
- Prefer shortcuts that require modifier keys (e.g., Ctrl+S for Save).
- If using single-character shortcuts, ensure they are only active when the relevant component or application area has focus (e.g., ‘j’ and ‘k’ to navigate messages in a webmail app only work when the message list has focus).
- Provide a settings panel where users can disable or remap single-key shortcuts.
Good Code Example
(Conceptual) JavaScript listening for shortcuts with modifiers or when focused:
// Example 1: Shortcut requires modifier key (Ctrl + P)
document.addEventListener('keydown', function(event) {
if (event.ctrlKey && event.key === 'p') {
event.preventDefault(); // Prevent browser print dialog
console.log('Ctrl+P shortcut activated - perform custom print action');
// performCustomPrint();
}
});
// Example 2: Single-key shortcut ('?') active only when help section has focus
const helpSection = document.getElementById('help-widget');
if (helpSection) { // Check if element exists
helpSection.addEventListener('keydown', function(event) {
if (event.key === '?') {
console.log('? pressed while help section focused - show details');
// showHelpDetails();
}
});
}
// Ensure the help section can receive focus if needed
// <div id="help-widget" tabindex="-1">...</div>
Bad Code Example
A global single-key shortcut that can be triggered accidentally:
// Bad: Listens globally for the 'm' key without modifiers
document.addEventListener('keydown', function(event) {
if (event.key === 'm') {
console.log('M key pressed - maybe toggling mute?');
// toggleMute();
// This could be triggered accidentally while typing in any input field
// or while dictating text using speech input.
}
});
A practical guide for healthcare leaders navigating WCAG compliance.