Что такое атрибут HTML tabindex?

Для чего используется атрибут tabindex в HTML?


person sleep    schedule 06.11.2010    source источник


Ответы (10)


tabindex - это глобальный атрибут, отвечающий за две вещи:

  1. он устанавливает порядок «фокусируемых» элементов и
  2. он делает элементы «фокусируемыми».

На мой взгляд, второе даже важнее первого. Очень мало элементов, на которых можно настроить фокус по умолчанию (например, ‹a› и элементы управления формами). Разработчики очень часто добавляют обработчики событий JavaScript (например, onclick) к элементам, не подлежащим фокусированию (‹div›, ‹span› и т. Д.), А также способ заставить ваш интерфейс реагировать не только на события мыши, но и на события клавиатуры. (например, 'onkeypress'), чтобы сделать такие элементы доступными для фокусировки. Наконец, если вы не хотите устанавливать порядок, а просто делаете свой элемент доступным для фокусировки, используйте tabindex="0" для всех таких элементов:

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

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

<a href="#" tabindex="-1">Tab key cannot reach here!</a>
person Konstantin Smolyanin    schedule 25.09.2013
comment
Выяснил, что <div tabindex> тоже работает. Есть ли причина не использовать это? - person danijar; 21.06.2014
comment
Использование tabindex, равного -1, удобно для таких вещей, как пропуск ссылок. Вы можете сделать ссылку элемента на что-то прямо над контентом, с которым вы пытаетесь связать пользователя, без доступности ссылки на сам элемент. - person Brett; 24.01.2015
comment
Стоит отметить - и ответ, вероятно, следует исправить, - что значение -1 не подходит, когда вы не хотите, чтобы оно было сфокусировано, а, скорее, когда вы хотите предотвратить фокусировку в результате навигации с клавиатуры. Элемент все еще можно сфокусировать, только не с помощью клавиатуры. - person amn; 21.07.2016
comment
@danijar да: это нарушение спецификации. Согласно html.spec.whatwg.org/multipage/, Атрибут tabindex, если он указан, должен иметь значение, которое является действительным целым числом. - person Mark Amery; 26.03.2017
comment
Это -1 конец моих поисков решения для элементов, которые имеют абсолютное положение и забавно ведут себя при фокусировке с помощью вкладки! HOorraaayyyyy. - person John Mutuma; 01.10.2018

Когда пользователь нажимает кнопку табуляции, он будет проходить через форму в порядке 1, 2 и 3, как показано в примере ниже.

Например:

Name: <input name="name" tabindex="1"  />
Age: <input name="age" tabindex="3"  />
Email: <input name="email" tabindex="2"  />
person Robert    schedule 06.11.2010
comment
- ›Что делать, если tabindex равен -1? Что это означает? - person ; 01.09.2014
comment
@AlyssaGono, похоже, вы не прочитали ответ с 85 голосами за ... tabindex, равный -1, означает, что вы не можете добраться до этого элемента, нажав кнопку табуляции - person John Ruddell; 08.01.2015

tabindex используется для определения последовательности, которой следуют пользователи. когда они используют клавишу Tab для навигации по странице. По умолчанию естественный порядок табуляции соответствует исходному порядку в разметке.

Атрибут содержимого tabindex позволяет авторам контролировать, должен ли элемент быть фокусируемым, должен ли он быть достижимым с использованием последовательной навигации по фокусу, и каков должен быть относительный порядок элемента для целей последовательной навигации по фокусу. Название «индекс табуляции» происходит от обычного использования клавиши «табуляция» для навигации по элементам, на которые можно сфокусироваться. Термин «табуляция» относится к продвижению вперед через фокусируемые элементы, к которым можно получить доступ с помощью последовательной навигации по фокусу.
Рекомендация W3C: HTML5
Раздел 7.4.1 Последовательная навигация по фокусу и атрибут tabindex

tabindex начинается с 0 или любого положительного целого числа и увеличивается с увеличением. Обычно избегают значения 0, потому что в старых версиях Mozilla и IE tabindex начинался с 1, переходил к 2 и только после 2 переходил в 0, а затем в 3. Максимальное целочисленное значение для tabindex равно 32767 . Если элементы имеют одинаковый tabindex, тогда tabindex будет соответствовать исходному порядку в разметке. Отрицательное значение удалит элемент из индекса вкладки, поэтому он никогда не будет сфокусирован.

Если элементу присвоено tabindex из -1, он удалит элемент, и он никогда не станет доступным для фокусировки, но фокус может быть передан элементу программно с помощью element.focus().

Если вы укажете атрибут tabindex без значения или с пустым значением, он будет проигнорирован.

Если атрибут disabled установлен для элемента, имеющего tabindex, этот элемент будет проигнорирован.


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


В спецификации HTML4 только следующие элементы поддерживают атрибут tabindex: anchor, area, button, input, объект, выберите и textarea . Но спецификация HTML5 с учетом доступности позволяет назначать всем элементам tabindex.

--

Например

<ul tabindex="-1">
  <li tabindex="1"></li>
  <li tabindex="2"></li>
  <li tabindex="3"></li>
</ul>

такой же как

<ul tabindex="-1">
  <li tabindex="1"></li>
  <li tabindex="1"></li>
  <li tabindex="1"></li>
</ul>

потому что независимо от того, что им всем назначено tabindex="1", они по-прежнему будут следовать одному и тому же порядку: первый - первый, а последний - последний. Это тоже то же самое ..

<div>
  <a></a>
  <a></a>
  <a></a>
</div>

потому что вам не нужно явно определять tabIndex, если это поведение по умолчанию. div по умолчанию не будет фокусироваться, теги anchor будут.

person davidcondrey    schedule 01.02.2015
comment
Какие версии IE и Mozilla начинают tabindex с 1 вместо 0? - person arminrosu; 13.02.2017
comment
-1; этот ответ немного запутан. Вы упомянули, что в более старых версиях IE и Firefox табуляция начинается с tabindex 1 вместо tabindex 0 ... но это то, что делают все браузеры, как того требует спецификация! Вы также противоречите себе, сначала говоря, что tabindex начинается с 0, но потом говорите, что порядок табуляции начнется с элемента, которому явно присвоено наименьшее значение tabindex выше 0. - person Mark Amery; 26.03.2017

Управление порядком табуляции (нажатие клавиши tab для перемещения фокуса) на странице.

Ссылка: http://www.w3.org/TR/html401/interact/forms.html#h-17.11.1

person Tom    schedule 06.11.2010
comment
Кроме того, наличие tabindex позволяет выбирать элемент щелчком мыши. (Добавляет пунктирные контуры, можно стилизовать с помощью :focus) - person user123444555621; 06.11.2010
comment
@ Pumbaa80 В любом случае вы можете выбрать любой элемент ввода щелчком мыши, то же самое касается использования CSS: focus. Атрибут tabindex не является обязательным. - person Drew; 02.03.2011
comment
Это касается только элементов ввода. Мой комментарий относится к любому типу элемента. См. Пример jsfiddle.net/XsYCj. - person user123444555621; 02.03.2011

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

В следующем примере, когда вы в первый раз нажимаете вкладку, ваш курсор переместится на #foo, затем на #awesome, затем на #bar.

<input id="foo" tabindex="1"  />
<input id="bar" tabindex="3"  />
<input id="awesome" tabindex="2"  />

Если вы нигде не определили индексы вкладок, фокус клавиатуры будет следовать за тегами HTML вашей страницы в том порядке, в котором они определены в документе HTML.

Если вы выполняете табуляцию больше раз, чем вы указали индексы табуляции, фокус переместится, как если бы индексы табуляции не было, то есть в порядке появления HTML-тегов.

person Eldamir    schedule 15.08.2013

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

Итак, если у вас есть:

text input A

text input B

submit button C

используя клавишу табуляции, вы перемещаетесь между A-> B-> C. Tabindex позволяет вам изменить этот поток.

person cherouvim    schedule 06.11.2010

Обычно, когда пользователь переходит от поля к полю в форме (в браузере, который позволяет использовать табуляцию, но не во всех браузерах), порядок - это порядок, в котором поля появляются в HTML-коде.

Однако иногда вам нужно, чтобы порядок табуляции был немного другим. В этом случае вы можете пронумеровать поля с помощью TABINDEX. Затем вкладки перемещаются в порядке от наименьшего TABINDEX к наибольшему.

Дополнительную информацию об этом можно найти здесь w3.

еще одну хорошую иллюстрацию можно найти здесь

person Mulki    schedule 06.11.2010

Проще говоря, tabindex используется, чтобы сосредоточиться на элементах. Синтаксис: tabindex="numeric_value" Это numeric_value вес элемента. Сначала будет доступно меньшее значение.

person Aman Dhanda    schedule 20.03.2015
comment
Первым будет доступ к меньшему значению. - не совсем так; 0 и отрицательные значения имеют особое значение. - person Mark Amery; 27.03.2017

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

person Nesha Zoric    schedule 04.05.2018

Переход по элементам управления обычно происходит последовательно по мере их появления в коде HTML.

Используя tabindex, табуляция будет передаваться от элемента управления с самым низким tabindex к элементу управления с самым высоким tabindex в последовательном порядке tabindex.

person Kamal    schedule 06.11.2010