Вы можете прикрепить события клавиатуры почти (по состоянию на HTML5
любой элемент может получить атрибут tabindex
) к любому элементу HTML
. Используя атрибут tabindex
, вы можете сделать элемент фокусируемым, таким образом, он будет принимать события клавиатуры.
var els = document.querySelectorAll('.focusable'), l = els.length, c = 0;
for(; c < l; c++) {
els[c].addEventListener('keydown', function(e) {
this.style.backgroundColor = (this.style.backgroundColor == 'green') ? 'white':'green';
console.log('Keydown event on element with ID = ' + e.target.id);
});
}
/* just for this demo */
.focusable {
width: 300px;
height: 300px;
border: 2px solid red;
line-height: 300px;
text-align: center;
margin: 5px auto;
}
<div id="div1" class="focusable" tabindex="0">Press a key</div>
<div id="div2" class="focusable" tabindex="0">Press a key</div>
<div id="div3" class="focusable" tabindex="0">Press a key</div>
<div id="div4" class="focusable" tabindex="0">Press a key</div>
Слово о tabindex
атрибуте
Атрибут
tabindex
позволяет элементу быть доступным через клавишу TAB
, некоторые элементы имеют такое поведение даже без указания атрибута tabindex
, такого как input
elements ...
Атрибут
tabindex
принимает только числовые значения. Пример для иллюстрации:
tabindex="X"
: здесь «Х» означает положительное число. Когда значение «X» становится больше, элемент теряет приоритет с точки зрения доступности для TAB
, поэтому tabindex="1"
является первым, он имеет больший приоритет по сравнению с другими элементами.
tabindex="0"
: рекомендуемое значение, при котором вы сохраняете порядок элементов на странице при нажатии клавиши TAB
.
tabindex="-1"
: при этом вы делаете элемент недоступным с помощью клавиши TAB
, но вы делаете его программно фокусируемым (полезно, когда вы хотите создать модальное всплывающее окно, которое можно закрыть с помощью клавиши ESC
).