Как игнорировать HTML-элемент из tabindex?

Есть ли способ в HTML запретить браузеру индексировать вкладки для определенных элементов?

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


person Tom Gullen    schedule 04.03.2011    source источник


Ответы (7)


Вы можете использовать tabindex="-1".

Спецификация W3C HTML5 поддерживает отрицательные tabindex значения:

Если значение является отрицательным целым числом
Пользовательский агент должен установить флаг фокуса tabindex элемента, но не должен разрешать доступ к элементу с помощью последовательной навигации по фокусу.


Обратите внимание: это функция HTML5, которая может не работать в старых браузерах.
Быть соответствует стандарту W3C HTML 4.01 (с 1999 г.), tabindex должен быть положительным.


Пример использования ниже в чистом HTML.

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

person Martin Hennings    schedule 04.03.2011
comment
Похоже, Google Chrome не поддерживает -1, что имеет смысл, поскольку технически tabIndex поддерживает только 0-32767 согласно ссылка W3. Итак, когда я сделал это; Я использовал 500. Хакерский; но работал. - person Flea; 24.03.2012
comment
@Flea Начиная с версии 23, Google Chrome поддерживает -1 в tabindex. Не знаю, как давно это произошло, возможно, до 23. Я тестировал -1 в Chrome 23, Firefox 18, IE8, IE9 и Opera 12.11, и он работал по всем направлениям. - person jkupczak; 14.01.2013
comment
Я отредактировал ответ, указав ссылку на обновленную спецификацию HTML5. tabindex теперь позволяет иметь отрицательные значения. - person James Donnelly; 09.04.2013
comment
@JamesDonnelly Спасибо за ваше редактирование. Я повторно добавил ссылку на спецификацию W3C HTML4 для совместимости с браузером. - person Martin Hennings; 15.04.2013
comment
Поддерживается с IE 5.01 msdn.microsoft.com /en-us/library/ie/ms534654(v=vs.85).aspx - person Skurpi; 11.06.2014
comment
@jimmykup Chrome 38, tabindex = -1 участвует в циклическом переборе табуляции. - person Ben Affleck; 26.10.2014
comment
Также начните индекс вкладки с 1, а не с 0, как некоторые ссылки говорят, что это нормально. Это не. - person Mike Bethany; 12.11.2014
comment
@MikeBethany Интересно - у вас есть источник? - person Martin Hennings; 13.11.2014
comment
@Martin Да, вот примеры. Tabindex 0: gist.github.com/mikbe/e4b68c89f678556afd8e - Tabindex 1: gist.github.com/mikbe/6cb1254a3cca53a2b8d2. Обратите внимание, что версия tabindex 0 перескакивает с tabindex 0 на адресная строка, в то время как версия tabindex 1 правильно переходит с 1 на 2. - person Mike Bethany; 13.11.2014
comment
@MikeBethany Я имел в виду источник, ссылку, официальное заявление, ссылку w3 или что-то подобное, но ваше утверждение является эмпирическим и, возможно, не применимо для всех браузеров. - person Martin Hennings; 14.11.2014
comment
@Martin ... и, возможно, не для всех браузеров. И это моя точка зрения. Ваш tabindex должен работать со всеми браузерами, поэтому, если у одного из основных браузеров есть проблема, вам придется для этого кодировать. Меня также интересуют только эмпирические факты, меня не волнуют гипотезы. - person Mike Bethany; 14.11.2014
comment
См. Мой ответ, который работает практически для всех современных Chrome и для большинства браузеров. stackoverflow.com/a/38005077/681830 - person Val; 20.12.2016
comment
Примечание для разработчиков GWT. Поскольку GWT имеет специальную обработку для значения -1, установите любое отрицательное значение предложения (например, tabIndex="-2") - person foal; 24.01.2017

Не забывайте, что, несмотря на то, что tabindex в спецификациях и HTML все в нижнем регистре, в Javascript / DOM это свойство называется tabIndex.

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

person Eric L.    schedule 28.02.2014
comment
Похоже, это должен быть комментарий, а не ответ. - person DrCord; 15.12.2015
comment
Эх, я был рад это прочитать, и, наверное, пропустил бы, если бы он был похоронен как комментарий. - person MalcolmOcean; 09.06.2016

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

person Matt    schedule 13.06.2014

Если вы работаете в браузере, который не поддерживает tabindex="-1", вам, возможно, удастся просто указать то, что нужно пропустить, действительно высокий индекс вкладок. Например, tabindex="500" в основном перемещает порядок табуляции объекта в конец страницы.

Я сделал это для длинной формы ввода данных с кнопкой, расположенной посередине. Это не та кнопка, которую люди нажимают очень часто, поэтому я не хотел, чтобы они случайно нажали на нее вкладку и нажали Enter. disabled не сработает, потому что это кнопка.

person Jemmeh    schedule 16.11.2015

Такой хак, как "tabIndex = -1", у меня не работает с Chrome v53.

Это работает для Chrome и большинства браузеров:

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>

person Val    schedule 24.06.2016
comment
Разве это не просто присвоит элементу индекс табуляции по умолчанию, а не отключит табуляцию? - person Lawyerson; 04.07.2017
comment
@Lawyerson нет, он фактически отключает табуляцию, как само объяснил removeAttribute. вы пробовали, но с другим результатом? - person Val; 07.07.2017
comment
Я пробовал безрезультатно. Браузеры по умолчанию позволяют вам переключаться между входами в том порядке, в котором они появляются на странице, даже если для них не установлен tabindex, поэтому для меня имеет смысл только то, что простое удаление атрибута на самом деле не отключает табуляцию полностью. Кроме того, вход, который я хочу использовать, изначально не имеет атрибута tabindex. - person Lawyerson; 07.07.2017
comment
Запустив фрагмент, я могу перейти к полю notabindex, как если бы оно было tabIndex=5 после нажатия кнопки. Это не проблема мэра, но все же не делает ее полностью недоступной для обсуждения. - person Mikael Dúi Bolinder; 15.02.2019
comment
Вероятно, это не работает, потому что вы используете верблюжий футляр. Это должно быть все в нижнем регистре tabindex - person dman; 01.05.2020
comment
Как говорит @dman, в html это tabindex, в javascript используйте tabIndex. - person Mark; 02.07.2020

Для этого нужно добавить tabindex="-1". Если добавить его к определенному элементу, он становится недоступным для навигации с клавиатуры. здесь, которая поможет вам лучше понять tabindex.

person Nesha Zoric    schedule 04.05.2018

Просто добавьте атрибут disabled к элементу (или используйте jQuery, чтобы сделать это за вас). Disabled (Отключено) запрещает фокусировку ввода или его выбор вообще.

person Yaakov Ainspan    schedule 11.10.2015
comment
Какая версия Chrome? - person Yaakov Ainspan; 30.06.2016
comment
Chrome 49.0.2623.75 (64-разрядная версия). - person Felix Eve; 30.06.2016
comment
Моя версия - 51.0.2704.103. Ознакомьтесь с этой скрипкой. У тебя может быть неправильный код, никогда не знаешь. - person Yaakov Ainspan; 08.07.2016
comment
@AtulChaudhary, как это не работает? Вы все еще можете сфокусировать это? - person Yaakov Ainspan; 16.11.2016
comment
как только поля отключены, они остаются отключенными, и это проблема в IOS9, но, похоже, работает в IOS10 - person Atul Chaudhary; 29.11.2016