Привет, сообщество Stackoverflow. Это мой первый вопрос, но я постараюсь быть максимально кратким и подробным.
Мне было поручено обновить наши веб-приложения ASP.NET, чтобы они соответствовали разделу 508. Все это для меня в новинку, и у меня проблемы с тем, чтобы все работало так, как ожидалось.
У нас есть страница, на которой пользователь получает дополнительную информацию о ссылке через событие onmouseover. Очевидно, это не работает для незрячих пользователей. Поэтому мы предоставляем им кнопку «Дополнительная информация», которая отображает тот же блок «всплывающей подсказки», который получает зрячий пользователь.
Я добавил aria-live="assertive
в div «всплывающую подсказку», понимая, что если бы этот div был скрыт при загрузке страницы и затем отображался с помощью кнопки, он будет прочитан JAWS. К моему ужасу, это не так.
Всплывающая подсказка выглядит так:
<div id='tooltip' aria-live='assertive' style='display:none;'>
<span id='tooltip_message'>This is my tooltip text</span>
</div>
Это отображается через событие нажатия кнопки со следующим кодом JavaScript:
function ShowTooltip(ttID)
{
var tt = $('#' + ttID);
tt.css('display', '');
}
Кнопка для отображения всплывающей подсказки выглядит так:
<button id='ttBtn' onclick="ShowToolTip('tooltip'); return false;">
More information
</button>
Мне удалось заставить JAWS прочитать всплывающую подсказку, добавив role = "alert" в div всплывающей подсказки, но я бы не хотел использовать роль предупреждения для целей, не связанных с предупреждением. В основном потому, что там написано «Оповещение, это текст моей всплывающей подсказки». пользователю.
Я хотел бы знать, как лучше всего заставить челюсти прочитать всплывающую подсказку, когда она станет видимой?
Я использую IE 11 и JAWS 16. Internet Explorer и JAWS - это требования, которые я не могу изменить.
Спасибо! -Рэй
ОБНОВЛЕНИЕ
Я подумал, что опубликую решение, которое мы использовали, на случай, если у других возникнет такая же проблема. Это упрощенная версия нашего кода, которая показывает только то, что необходимо, чтобы всплывающая подсказка отображалась и читалась при ее отображении. Это серверный элемент управления, поэтому многие идентификаторы основаны на свойстве ClientID элемента управления и имеют известные суффиксы (_tootip, _tooltipcontainer и т. Д.)
JavaScript:
//handles showing/hiding of the tooltip
function ShowToolTip(ttID)
{
var tt = $('#' + ttID + '_ToolTip');
var ttContainer = $('#' + ttID + '_ToolTipContainer');
var ttClone = tt.clone();
tt.remove();
ttClone.css('display', '');
ttContainer.append(ttClone);
}
//Closes the tooltip and returns focus to the hidden (from sighted users) button that shows it.
function CloseToolTip(ttID)
{
var tt = $('#' + ttID + '_ToolTip');
tt.css('display', 'none');
}";
Разметка:
<button id="tooltip1_508KeyboardButton" class="hidden" onclick="ShowToolTip('tooltip1'); return false;" onblur="CloseToolTip('tooltip1');">Click for overview</button>
<div id='tooltip1_ToolTipContainer' aria-live='polite' aria-atomic='true'>
<div id='tooltip1_ToolTip' class='section tooltip' style='display:none;'>
<span id='tooltip1_Msg'>This is my tooltip's text.</span>
</div>
</div>
Надеюсь, это кому-то пригодится в будущем. Насколько я понимаю, я мог бы легко разместить область aria-live, которая остается видимой где-нибудь за пределами экрана, которая меняет свой текст, когда всплывающая подсказка «отображается». Так что есть много способов снять шкуру с этой кошки.