Skip to content

Commit 44b0748

Browse files
committed
fix: add aria-activedescendant attribute to improve accessibility in listbox navigation
Signed-off-by: Parth Raiyani <[email protected]> Change-Id: Id83abc8201b895ba824c7795dec787cef50e1232
1 parent b88a5f6 commit 44b0748

File tree

1 file changed

+13
-0
lines changed

1 file changed

+13
-0
lines changed

browser/src/control/jsdialog/Util.KeyboardListNavigation.ts

Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -43,6 +43,13 @@ function moveToFocusableEntry(
4343
}
4444
};
4545

46+
const updateAriaActiveDescendant = (elem: HTMLElement) => {
47+
const listbox = elem.closest('[role="listbox"]');
48+
if (listbox && elem.id) {
49+
listbox.setAttribute('aria-activedescendant', elem.id);
50+
}
51+
};
52+
4653
// If the current element is focused but not selected, add 'selected' class and return
4754
if (
4855
document.activeElement === currentElement &&
@@ -51,6 +58,7 @@ function moveToFocusableEntry(
5158
) {
5259
currentElement.classList.add('selected');
5360
updateAriaSelected(currentElement, 'true');
61+
updateAriaActiveDescendant(currentElement);
5462
return;
5563
}
5664

@@ -63,6 +71,7 @@ function moveToFocusableEntry(
6371
(siblingElement as HTMLElement).focus();
6472
siblingElement.classList.add('selected');
6573
updateAriaSelected(siblingElement, 'true');
74+
updateAriaActiveDescendant(siblingElement);
6675

6776
currentElement.classList.remove('selected');
6877
updateAriaSelected(currentElement, 'false');
@@ -77,6 +86,10 @@ function focusFirstListBoxItem(listboxElement: HTMLElement) {
7786
firstItem.classList.add('selected');
7887
firstItem.setAttribute('aria-selected', 'true');
7988
firstItem.focus();
89+
90+
if (firstItem.id) {
91+
listboxElement.setAttribute('aria-activedescendant', firstItem.id);
92+
}
8093
}
8194
}
8295

0 commit comments

Comments
 (0)