Будет ли фокус установлен на невидимые элементы управления формы с помощью автофокуса HTML5? - PullRequest
6 голосов
/ 03 февраля 2012

Как указано в заголовке: фокус по-прежнему будет установлен на элементах управления формы с помощью autofocus="autofocus", даже если они скрыты с помощью display: none; или visibility: hidden;?

Ответы [ 2 ]

5 голосов
/ 03 февраля 2012

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

Скрытые поля со свойством autofocus получают фокус, когда они становятся видимыми.

Вот jsFiddle , который показывает, что происходит, если у вас есть видимое поле и скрытое поле, а затем показывает скрытое поле.

А вот вариант , который демонстрируетчто происходит, если видимое поле не имеет свойства autofocus.

2 голосов
/ 03 февраля 2012

В проекте стандарта HTML5 требуется только, чтобы элемент был "фокусируемым" там, где фокусировка означает:

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

  • a элементов с атрибутом href
  • link элементы, имеющие атрибут href
  • button элементы, которые не отключены
  • input элементов, атрибут type которых не находится в состоянии Hidden и которые не отключены
  • select элементы, которые не отключены
  • textarea элементы, которые не отключены
  • command элементы, у которых нет отключенного атрибута
  • Элементы с установленным атрибутом draggable, если это позволило бы пользовательскому агенту позволить пользователю начать операции перетаскивания для этих элементы без использования указательного устройства
  • Редактирование хостов
  • Просмотр контекстных контейнеров

Он говорит «но только если элемент либо визуализируется ...», а стандарт определяет «визуализированный» как:

Элемент визуализируется, если он находится в документе, либо его родитель сам узел визуализируется или это узел документа, и это явно не исключены из рендеринга с помощью:

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

Короче говоря, ответ, как представляется, заключается в том, что если все другие требования будут выполнены, то display:none не будет сфокусирован, но display:hidden будет - при условии, что все браузеры действительно следуют спецификации.

...