No hay una lista definitiva, depende del navegador. El único estándar que tenemos es DOM Nivel 2 HTML , según el cual los únicos elementos que tienen un focus()
método son HTMLInputElement, HTMLSelectElement, HTMLTextAreaElement y HTMLAnchorElement. Esto omite notablemente HTMLButtonElement y HTMLAreaElement.
Los navegadores de hoy definen focus()
en HTMLElement, pero un elemento no se enfocará a menos que sea uno de:
- HTMLAnchorElement / HTMLAreaElement con un href
- HTMLInputElement / HTMLSelectElement / HTMLTextAreaElement / HTMLButtonElement pero no con
disabled
(IE en realidad te da un error si lo intentas), y las cargas de archivos tienen un comportamiento inusual por razones de seguridad
- HTMLIFrameElement (aunque enfocarlo no hace nada útil). Otros elementos de incrustación también, tal vez, no los he probado todos.
- Cualquier elemento con un
tabindex
Es probable que haya otras excepciones sutiles y adiciones a este comportamiento dependiendo del navegador.
element.isContentEditable === true
son enfocables también. Tenga en cuenta que IE -10 (11+?) Puede enfocar cualquier elemento con bloque de visualización o tabla (div, span, etc.).Aquí tengo un selector CSS basado en la respuesta de bobince para seleccionar cualquier elemento HTML enfocable :
o un poco más bella en SASS:
Lo agregué como respuesta, porque eso era lo que estaba buscando cuando Google me redirigió a esta pregunta de Stackoverflow.
EDITAR: hay un selector más, que es enfocable:
Sin embargo, esto se usa muy raramente.
fuente
<a href="foo.html">Bar</a>
es enfocable porque es una
elemento que tiene unhref
atributo. Pero su selector no lo incluye.tabindex="-1"
no no hacer que un elemento unfocusable, simplemente no puede ser enfocado por tabulación. Todavía puede recibir foco haciendo clic en él o programáticamente conHTMLElement.focus()
; lo mismo para cualquier otro número negativo. Ver: developer.mozilla.org/en-US/docs/Web/HTML/Global_attributes/…Estoy creando una lista SCSS de todos los elementos enfocables y pensé que esto podría ayudar a alguien debido al rango de Google de esta pregunta.
Algunas cosas a tener en cuenta:
:not([tabindex="-1"])
a:not([tabindex^="-"])
porque es perfectamente plausible generar de-2
alguna manera. Más vale prevenir que curar, ¿verdad?:not([tabindex^="-"])
a todos los otros selectores enfocables es completamente inútil. ¡Al usarlo[tabindex]:not([tabindex^="-"])
ya incluye todos los elementos con los que estaría negando:not
!:not([disabled])
porque los elementos deshabilitados nunca pueden ser enfocables. De nuevo, es inútil agregarlo a cada elemento.fuente
La biblioteca de accesibilidad ally.js proporciona una lista no oficial basada en pruebas aquí:
https://allyjs.io/data-tables/focusable.html
(Nota: su página no dice con qué frecuencia se realizaron las pruebas).
fuente
Quizás este pueda ayudar:
valor de retorno: verdadero = éxito, falso = fallido
Reff: https://developer.mozilla.org/en-US/docs/Web/API/DocumentOrShadowRoot/activeElement https://developer.mozilla.org/en-US/docs/Web/API/HTMLElement/focus
fuente
http://www.w3schools.com/cssref/sel_focus.asp
fuente