Як зробити div “табуляційним”?


92

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

Хтось має рішення?


Ви хочете зробити вкладку між кнопками? Або диви?
Dancrumb

2
Якщо якір має hrefатрибут, він повинен спрацювати. Це може бути, а може і не бути відповідним використанням розмітки, якщо активуваний елемент насправді не робить щось.
Тім Медора,

Питання було поставлене stackoverflow.com/questions/3059203/tab-index-on-div
ntgCleaner

Дякую, рішення href працює найкраще! Тім, якщо ти даси відповідь, я прийму її.
TheBoss

Відповіді:


127

Додайте 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>

1
Примітка: tabindex не є допустимим атрибутом div у HTML <5. Посилання {Виправлено після того, як Neps вказав на мою помилку}
Dancrumb

4
@Dancrumb, так, вони в HTML5
Neps

45
Можливо, краще використовувати, tabindex=0хоча б, щоб не заважати природному порядку вкладок.
steveax

7
До речі, це не дозволяє клацнути на ньому клавішею enter.
Ciantic

5
Hmn, @Ciantic будь-яка ідея, як ми можемо обійти або імітувати клацання на Enter під час вкладки до цього div? hmn
Джомар Севільйо

7

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

$(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


1
Я вважаю, що краще використовувати подію клавіатури замість події клавіатури, як рекомендується тут: developer.mozilla.org/en-US/docs/Web/Accessibility/… . Очевидною перевагою клавіатури є те, що якщо ви повернете значення false з вашої функції передачі (після виклику click ()), це правильно зупинить розповсюдження події в іншому місці на сторінці, тоді як при введенні клавіш це не працює.
M Katz

Пробіл також може прокручувати сторінку. Можливо, вам доведеться скористатись і функцією prevenDefault.
b_laoshi

3

Додайте tabindex="0"атрибут до кожного розділу div, який потрібно вкласти. Потім використовуйте псевдокласи 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>


1

Зробіть елементи вкладками та натисканнями натисканням клавіші за допомогою jquery

Припущення

  • Усі елементи, які не мають вкладки, не можна натискати і мають бути натисканими, мають атрибут onclick (його можна змінити на клас або інший атрибут)
  • Всі елементи одного типу; Я буду використовувати div.
  • Ви використовуєте jquery

Зразок html:

...

<div onclick="clicked(this)">Button 1</div>
<div onclick="clicked(this)">Button 2</div>
<div onclick="clicked(this)">Button 3</div>

...

Код Jquery: це код, який буде запускатися, коли сторінка завантажиться. Він повинен працювати на вашій HTML-сторінці.

$(()=>{
    // make divs with an onclick attribute tabbable/clickable
    $('div[onclick]')
        .attr('tabindex', '0')                     // Add tab indexes
        .keypress((evt)=>{
            var key = evt.key;
            evt.preventDefault();                  // Ensure all default keypress
                                                   // actions are not used
            if (key === ' ' || key === 'Enter') {  // Only send click events for Space
                                                   // or Enter keys
                evt.currentTarget.click();         // Run the click event for element
            }
        });
});

Ви можете знайти робочий приклад тут .

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.