Как вы делаете div "tabbable"?

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

У кого-нибудь есть решение?

Ответ 1

Добавьте атрибуты tabindex к вашим элементам div.

Пример:

<div tabindex="1">First</div>
<div tabindex="2">Second</div>

В ответе steveax, если вы не хотите, чтобы порядок табуляции отклонялся от того, где находится элемент на странице, установите tabindex в 0:

<div tabindex="0">First</div>
<div tabindex="0">Second</div>

Ответ 2

для тех, кто заинтересован, в дополнение к принятому ответу, вы можете добавить следующий jquery, чтобы изменить стиль div при входе в него, а также обработать Enter и Space, чтобы вызвать щелчок (тогда ваш обработчик клика сделает остальные)

$(document).on('focus', '.button',function(){
    $(this).css('border','1px dotted black')
});
$(document).on('keyup', '.button',function(e){
    if(e.which==13 || e.which==32)
        $(this).click()
});

Я уверен, что кто-то сделал это в jq-плагине $(). makeTabStop

Ответ 3

Добавьте атрибут tabindex="0" для каждого div, который вы хотите использовать tabbable. Затем используйте псевдо-классы CSS: hover и: focus, например, чтобы показать пользователю приложения, что div находится в фокусе и, например, кликабель. Используйте JavaScript для обработки щелчка.

var doc = document;
var providers = doc.getElementsByClassName("provider");

for (var i = 0; i < providers.length; i++) {
    providers[i].onclick = function() {
      console.log(this.innerHTML);
    };
}
.provider {
    flex: 0 1 auto;
    align-self: auto;
    width: 256px;
    height: 48px;
    margin-top: 12px;
    margin-right: 12px;
    text-align: center;
    line-height: 48px;
    
    text-transform: uppercase;
    background-size: contain;
    background-repeat: no-repeat;
    background-position: 10%;
    background-color: gray;
}

.provider:hover{
  cursor: pointer;
}

.provider:focus{
    -webkit-box-shadow: 0px 2px 8px 2px rgba(0,0,0,0.4);
    -moz-box-shadow: 0px 2px 8px 2px rgba(0,0,0,0.4);
    box-shadow: 0px 2px 8px 2px rgba(0,0,0,0.4);
}
<h4>Click in this area first then press tab</h4>
<div id="email" class="provider" tabindex="0">email</div>
<div id="facebook" class="provider" tabindex="0">facebook</div>
<div id="github" class="provider" tabindex="0">github</div>
<div id="google" class="provider" tabindex="0">google</div>
<div id="twitter" class="provider" tabindex="0">twitter</div>