Как мне найти ссылки без текста?
Я работаю над соответствием WCAG и мне нужно исправить ошибки "Пустая ссылка".
Это пример одного из элементов, обеспечивающих ошибку:
<a style="bottom: 0px; left: 7px; width: 25px; cursor: default;" class="histogram_bar_link" title="Less than 2,016 (0)" href="#"
onclick="AjaxControlToolkit.SliderRefinementControl.FindAndSetSliderHandlesAndValuesToRange(" ctl00_ctl43_g_453d6d26_9535_440a_ba72_b7b88de22f31_csr5
", 0, 1, this); return false;" activebarid="ctl00_ctl43_g_453d6d26_9535_440a_ba72_b7b88de22f31_csr5_HistogramActiveBar0" disabled="disabled">
<div id="ctl00_ctl43_g_453d6d26_9535_440a_ba72_b7b88de22f31_csr5_HistogramBgBar0" class="histogram_bar_background">
<div id="ctl00_ctl43_g_453d6d26_9535_440a_ba72_b7b88de22f31_csr5_HistogramActiveBar0" class="histogram_bar_active" style="height: 0px; margin-top: 50px;">
</div>
</a>
Мне нужно найти этот элемент и другие теги привязки, которые не содержат текста, чтобы я мог исправить их с помощью JS
1 ответ
Это не ссылка. Не пытайтесь исправить это на стороне клиента, просто исправьте HTML. В идеале, если вы обновляете какой-либо элемент управления, генерирующий этот HTML, вам не нужно полагаться на сценарий на стороне клиента.
1. Выбор правильного контроля
Давайте обратимся к первому вопросу, используя правильный элемент...
Контроль переносит меня на другую страницу? Используйте Якорь
Если при нажатии, постукивании или активации с помощью клавиатуры или голоса (или вставке нового метода взаимодействия здесь) пользователь перенаправляется на другой URL-адрес (включая привязку на той же странице), тогда используйте <a href="[URL]">
, Убедитесь, что вы используете href
атрибут и что он имеет реальный URL, а не "#" (в противном случае вы, вероятно, полагаетесь на JavaScript, который вовсе не необходим для гиперссылки). Если href
указывает только на "#", тогда вы, вероятно, делаете это неправильно. Если это указывает на именованный якорь как часть ваших усилий по прогрессивному улучшению, то это совершенно верно.
Изменяет ли что-то элемент управления на текущей странице? Используйте кнопку
Если при активации пользователь не перемещается со страницы (или на якорь на странице), а вместо этого получает новый вид (окна сообщений, изменения в макете и т. Д.), Тогда используйте <button>
, Хотя вы могли бы использовать <input type="button">
более вероятно, что вы столкнетесь с ранее существовавшими стилями и последующими разработчиками (такими как я).
Элемент управления отправляет поля формы? Используйте Отправить
Если при активации информация, введенная пользователем (введя вручную или выбрав элементы на экране), отправляется обратно на сервер, используйте <input type="submit">
, Это лучше жить в <form>
, Если вам нужно больше контроля над стилем или вам нужно встраивать больше, чем просто текстовую строку, используйте <button type="submit">
вместо. Я склонен предпочесть <input type="submit">
как я считаю, он сталкивается с меньшим количеством конфликтов (как умственных, так и стилистических) с разработчиками.
Замечание пользователя клавиатуры
Подумайте о пользователях клавиатуры на мгновение. Гиперссылка может быть запущена нажатием клавиши ввода. Но настоящая кнопка может быть запущена нажатием клавиши ввода или пробела. Когда гиперссылка имеет фокус и пользователь нажимает клавишу пробела, страница прокручивается на один экран. Если прокручивать больше нечего, пользователь просто ничего не испытывает. Учитывая набор элементов интерфейса, которые выглядят одинаково, если некоторые работают с пробелом, а некоторые нет, вы не можете ожидать, что пользователи будут иметь большую уверенность в том, как ведет себя страница.
У меня есть демонстрационная программа CodePen, которая показывает это в действии: http://s.codepen.io/aardrian/debug/PZQJyd
Я думаю, что также стоит упомянуть, что события, запускаемые пробелом, запускаются только при отпускании клавиши, тогда как использование клавиши Enter запускает событие, как только вы нажимаете клавишу (до ее отпускания).
Для справки: http://adrianroselli.com/2016/01/links-buttons-submits-and-divs-oh-hell.html
2. Дать ему доступное имя
Теперь давайте поговорим о том, как вы вводите доступное имя в эту кнопку. Я предполагаю, что вы не хотите, чтобы это было видно визуально. В этом случае, дайте ему класс visually-hidden
и применить эти стили:
.visually-hidden {
position: absolute !important;
clip: rect(1px 1px 1px 1px); /* IE6, IE7 */
clip: rect(1px, 1px, 1px, 1px);
padding:0 !important;
border:0 !important;
height: 1px !important;
width: 1px !important;
overflow: hidden;
}
Это позволит читать программы чтения с экрана. Это также означает, что вы можете (и должны) title
атрибут
3. Объедините это
Теперь возьмите под свой контроль и настройте его соответственно:
<button style="…" class="histogram_bar_link" onclick="…" disabled="disabled">
<span class="visually-hidden">Less than 2,016 (0)</span>
<div id="…" class="histogram_bar_background">
<div id="…" class="histogram_bar_active" style="…"></div>
</div>
</button>
Я превратил это в <button>
и дал ему доступное имя, вставив <span>
с visually-hidden
класс, чтобы скрыть это от глаз.