Атрибут "aria-labelledby" забезпечує обов'язкову вимогу WCAG.
<!-- Відповідний код HTML виглядає так --> <pid="label-1">Оберіть варіант</p> <selectclass="select_common"id="input-select-1"aria-labelledby="label-1"> <optionvalue="var_1">Варіант 1</option> <optionvalue="var_2">Варіант 2</option> <optionvalue="var_3">Варіант 3</option> </select>
Оберіть варіант
Набір атрибутів із "aria-describedby"
Атрибут "aria-describedby" вказує на додаткову підказку, яка буде озвучена скрінрідером.
<!-- Відповідний код HTML виглядає так --> <pid="label-2">Оберіть варіант</p> <pclass="sr-only"id="description-2">Оберіть одну опцію з цього списку</p> <selectclass="select_common"id="input-select-1"aria-labelledby="label-2"aria-describedby="description-2"> <optionvalue="var_1">Варіант 1</option> <optionvalue="var_2">Варіант 2</option> <optionvalue="var_3">Варіант 3</option> </select>
// закриття списку при натисканні за його межами:
document.addEventListener("click", (event) => {
if (!multiDropdownButton.contains(event.target) && !multiDropdownOptions.contains(event.target)) {
multiDropdownButton.setAttribute("aria-expanded", "false");
multiDropdownOptions.setAttribute("aria-expanded", "false");
}
});
// навігація між елементами (клавіатура/миша):
options.forEach((option, index) => {
option.addEventListener("keydown", (event) => {
switch (event.key) {
case "ArrowDown":
case "ArrowRight":
event.preventDefault();
const nextOption = options[index + 1] || options[0];
nextOption.focus();
break;
case "ArrowUp":
case "ArrowLeft":
event.preventDefault();
const prevOption = options[index - 1] || -1;
if (prevOption == -1) {
MultiDropdown.toggleOptionsList("close");
multiDropdownButton.focus();
} else {
prevOption.focus();
}
break;
case "Escape":
MultiDropdown.toggleOptionsList("close");
case " ":
case "Enter":
event.preventDefault();
MultiDropdown.toggleOption(option);
break;
}
});