HTML-элементы для JavaScript-хуков - PullRequest
2 голосов
/ 02 ноября 2009

Большую часть своей жизни в разработке я создал сгенерированную на JavaScript кнопку, например:

<span>Open/hide</span>

С CSS, как

span {
    cursor: pointer;
}

Это, кажется, работает для меня, и IMO, это выглядит и кажется лучше, чем

<a href="(#|javascript:void(0);|javascript:;|return false)">open/hide</a>

Однако я начинаю думать, что люди могут использовать ссылки, потому что они лучше доступны для программ чтения с экрана. Также имеет смысл, что браузер позволит вам переходить по ссылке - но не обязательно по диапазону в стиле CSS (как в моем предыдущем примере).

Есть ли способ получить лучшее из обоих миров? То есть кнопка, на которую можно вкладывать вкладки, которая доступна для программ чтения с экрана, а также не подразумевает семантической ссылки на другой документ и не требует хакерских способов помешать переходу ссылки куда-либо?

Примечание. Они предназначены только для вставленных кнопок JS, а не для существующих ссылок, поведение которых изменяется с помощью JS.

Ответы [ 4 ]

6 голосов
/ 02 ноября 2009

То есть кнопка, на которую можно вкладывать вкладки, которая доступна для программ чтения с экрана и не подразумевает семантической ссылки на другой документ

Да, и, как ни странно, это называется просто: <button>. Или <input type="button">, если вам нужен только текстовый контент. Затем вы можете добавить к нему загрузку CSS, чтобы он выглядел как кнопка формы по умолчанию, если хотите.

Единственной проблемой является IE, который добавляет лишнюю пару пикселей несменяемого отступа к виджетам кнопок и перемещает содержимое кнопки вниз и вправо на один пиксель при нажатии. Часто это не имеет значения. Если вам не нужно заполнение нулями, вы также можете компенсировать это, добавив отступ во всех браузерах, кроме IE.

Другая семантически обоснованная возможность - использовать <input type="image">, хотя для этого, очевидно, требуется, чтобы контент был изображением. Вместо этого использование альтернативного текста не работает из-за рендеринга IE неработающих изображений.

В то время как кнопки семантически являются наиболее подходящим элементом, если вы не хотите, чтобы эта проблема с оформлением была, вы можете продолжать использовать диапазон или другой бессмысленный элемент (как это делает SO), но, по крайней мере, улучшить доступность клавиатуры, предоставив ей tabindex значение. Затем он будет фокусироваться как ссылка, хотя, к сожалению, вам понадобятся дополнительные сценарии, если вы хотите сделать его активируемым с клавиатуры (перехватывайте хотя бы коды нажатия клавиш 13 и 32). Вы также можете пометить такой элемент как кнопку с помощью ARIA для обеспечения доступности, хотя, честно говоря, я не уверен, что это действительно что-то очень полезное для современного набора инструментов.

Иногда, когда действие связано с другим элементом на странице, например с предложенной кнопкой «открыть / скрыть», мне кажется законным использовать внутреннюю ссылку на этот элемент. (Однако с назначенным JS onclick, а не с любым встроенным JS или ужасными javascript: псевдо-URL.)

.hidden { display: none; }

<a href="#foo" class="toggler">open/hide</a>
<div id="foo"> blah </div>

for (var i= document.links.length; i-->0;)
    if (document.links[i].className==='toggler')
        document.links[i].onclick= toggle;

function toggle() {
    var el= document.getElementById(this.hash.substring(1));
    el.className= el.className==='hidden'? 'hidden' : '';
}

или похожая идиома в выбранной вами библиотеке. Это сделает что-то полезное в не-JavaScript браузерах; Вы также можете добавить правило для проверки хэша текущего местоположения, чтобы, если кто-то откроет вашу ссылку для показа на новой вкладке, этот документ будет отображать соответствующий элемент.

0 голосов
/ 02 ноября 2009

Я бы сказал, что кнопка соответствует вашим требованиям ...

<input type="button" class="js_button" value="Javascript Button" />

CSS:

.js_button, .js_button:active, js_button:focus {
    background-color: #FFF;
    border: none;
    margin: 0 0;
    padding: 0 0;
}

Кнопки могут быть снабжены вкладками, являются семантическими, автоматически имеют индексы вкладок и действия нажатия клавиш и не подразумевают ссылки на другие документы. Единственная сложность - удаление анимации mousedown - я осмотрюсь и посмотрю, есть ли что-нибудь для удаления этой анимации без хаков.

0 голосов
/ 02 ноября 2009

Вы можете ссылаться на любой объект на странице, если указали id или name элемента.

Например:

/1364654/html-elementy-dlya-javascript-hukovcomments-1659137

HTML-элементы для хуков JavaScript

0 голосов
/ 02 ноября 2009

Кажется, делает

<span tabIndex="n">foo</span>

позволяет вам вкладывать его. Однако нажатие клавиши ввода, пока оно находится в фокусе, не имитирует нажатие. Что, я думаю, легко исправить, добавив на него событие keydown.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...