Як ігнорувати HTML-елемент від tabindex?


361

Чи є в HTML спосіб сказати браузеру не забороняти індексацію вкладок на окремих елементах?

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

Відповіді:


591

Можна використовувати tabindex="-1".

Специфікація W3C HTML5 підтримує негативні tabindexзначення:

Якщо значення є від'ємним цілим числом,
Агент користувача повинен встановити прапор фокусування табіндекса елемента, але не повинен дозволяти досягти елемента за допомогою послідовної навігації по фокусуванню.


Зверніть увагу, що це функція HTML5 і може не працювати зі старими браузерами.
Щоб відповідати стандарту W3C HTML 4.01 (з 1999 р.) , Tabindex повинен бути позитивним.


Зразок використання нижче в чистому HTML.

<input />
<input tabindex="-1" placeholder="NoTabIndex" />
<input />


12
Здається, Google Chrome не підтримує -1, що має сенс, оскільки технічно tabIndex підтримує лише 0 -32767 відповідно до посиланняW3 . Отже, коли я це робив; Я використав 500. Хакіш; але працював.
блоха

38
@Flea Станом на 23 версії, Google Chrome підтримує -1 на tabindex. Не впевнений, як давно це сталося, можливо, до 23. Я протестував "-1" в Chrome 23, Firefox 18, IE8, IE9 та Opera 12.11, і це працювало в усьому світі.
jkupczak

5
Я відредагував відповідь на посилання на оновлену специфікацію HTML5. tabindexтепер дозволяє мати негативні значення.
Джеймс Доннеллі

1
@JamesDonnelly Дякую за вашу зміну. Я знову додав посилання на специфікацію W3C HTML4 для сумісності браузера.
Мартін Хеннінгс

2
Підтримується з IE 5.01 msdn.microsoft.com/en-us/library/ie/ms534654(v=vs.85).aspx
Skurpi

121

Не забувайте, що, незважаючи на те tabindex, що всі параметри в специфікаціях та в HTML, у JavaScript / DOM це властивість називається tabIndex.

Не втрачайте розуму, намагаючись з’ясувати, чому ваші програмно-змінені індекси викликів element.tabindex = -1не працюють. Використовуйте element.tabIndex = -1.


34
Схоже, це має бути коментар, а не відповідь.
DrCord

47
Е, я був радий прочитати це, і, мабуть, пропустив би його, якби його поховали як коментар.
MalcolmOcean

10

Якщо це природні елементи в порядку вкладки, такі як кнопки та анкери, видалення їх із порядку вкладки за допомогою tabindex = -1 є своєрідним запахом доступності. Якщо вони надають дублікати функціональності, видаляючи їх з порядку вкладки, це нормально, і подумайте про додавання до цих елементів aria-hidden = true, щоб допоміжні технології їх ігнорували.


8

Якщо ви працюєте у веб-переглядачі, який не підтримує tabindex="-1", можливо, вам вдасться піти, просто надавши речі, які потрібно пропустити, дійсно високий індекс вкладки . Наприклад, в tabindex="500"основному переміщується порядок вкладки об'єкта до кінця сторінки.

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


5

Такий хак, як "tabIndex = -1", не працює для Chrome v53.

Ось що працює для хромування та більшості браузерів:

function removeTabIndex(element) {
    element.removeAttribute('tabindex');
}
<input tabIndex="1" />
<input tabIndex="2" id="notabindex" />
<input tabIndex="3" />
<button tabIndex="4" onclick="removeTabIndex(document.getElementById('notabindex'))">Remove tabindex</button>


Чи не буде це просто призначити елементу вкладки за замовчуванням елементу, а не відключити вкладку?
Адвокат

@Lawyerson ні, він фактично відключає вкладку, оскільки він самостійно пояснював "RemoveAttribute". Ви пробували, але з іншим результатом?
Валь

2
Я спробував це без ефекту. Браузери за замовчуванням дозволяють проводити вкладку через введення в тому порядку, як вони відображаються на сторінці, навіть якщо на них не встановлено жодного табіндексу, тому для мене є сенс, що просто видалення атрибута насправді не вимикає вкладку повністю. Крім того, вхід, який я хочу використовувати цей, не має атрибута "tabindex" для початку.
Адвокат

Запуск фрагмента я можу вкласти в notabindexполе, як ніби воно було tabIndex=5після натискання кнопки. Не питання міського голови, але все-таки не роблячи це повністю "неможливим".
Мікаель Дуї Болінджер

Це, мабуть, не працює, оскільки ви використовуєте чохол для верблюдів. Це повинно бути все малі tabindex
регіони

3

Спосіб зробити це шляхом додавання tabindex="-1". Додавши це до певного елемента, він стає недоступним за допомогою навігації на клавіатурі. Існує велика стаття тут , яка допоможе вам у подальшому зрозуміти TabIndex .


2

Просто додайте атрибут disabledдо елемента (або використовуйте jQuery для цього). Disabled (Заборонено) запобігає зосередженню або вибору входу взагалі.


Яка версія Chrome?
Яков Айнспан

Chrome 49.0.2623.75 (64 біт).
Фелікс Єва

Моя версія 51.0.2704.103. Ознайомтеся з цією загадкою . У вас може бути неправильний код, який ви ніколи не знаєте.
Яков Айнспан

@AtulChaudhary, як це не працює? Ви все ще можете це зосередити?
Яков Айнспан

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