Búsqueda de sitios web

¿Es posible enfocar un <div> usando la función focus() de JavaScript?


¿Es posible enfocar un <div> usando la función focus() de JavaScript?

Tengo una etiqueta <div>

<div id="tries">You have 3 tries left</div>

Estoy intentando enfocar el <div> anterior usando :

document.getElementById('tries').focus();

Pero no funciona. ¿Alguien podría sugerir algo...?

Respuesta #1

Sí, esto es posible. Para hacerlo, necesitas asignar un tabindex...

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

Un tabindex de 0 colocará la etiqueta "en el orden natural de tabulación de la página". Un número mayor le dará un orden específico de prioridad, donde 1 será el primero, 2 el segundo y así sucesivamente.

También puedes dar un tabindex de -1, lo que hará que el div solo pueda recibir el foco mediante un script, no por el usuario.

document.getElementById('test').onclick = function () {
    document.getElementById('scripted').focus();
};
div:focus {
    background-color: Aqua;
}
<div>Element X (not focusable)</div>
<div tabindex="0">Element Y (user or script focusable)</div>
<div tabindex="-1" id="scripted">Element Z (script-only focusable)</div>
<div id="test">Set Focus To Element Z</div>

Obviamente, es una vergüenza tener un elemento al que se puede enfocar mediante un script y que no se puede enfocar mediante otro método de entrada (especialmente si un usuario solo usa el teclado o tiene restricciones similares). También hay un montón de elementos estándar que son enfocables por defecto y tienen información semántica incorporada para ayudar a los usuarios. Usa este conocimiento sabiamente.

Respuesta #2

window.location.hash = '#tries';

Esto desplazará hasta el elemento en cuestión, esencialmente "enfocándolo".

Respuesta #3

document.getElementById('tries').scrollIntoView() funciona. Esto funciona mejor que window.location.hash cuando tienes posicionamiento fijo.

Respuesta #4

Puedes usar tabindex

<div tabindex="-1"  id="tries"></div>

El valor de tabindex puede permitir un comportamiento interesante.

  • Si se asigna un valor de "-1", no se puede acceder al elemento mediante tabulación, pero se le puede dar enfoque al elemento de forma programática (usando element.focus()).
  • Si se le asigna un valor de 0, el elemento puede ser enfocado mediante el teclado y forma parte del flujo de tabulación del documento. Los valores mayores que 0 crean un nivel de prioridad, siendo 1 el más importante.

Respuesta #5

<div id="inner" tabindex="0">
    this div can now have focus and receive keyboard events
</div>

Respuesta #6

document.getElementById('test').onclick = function () {
    document.getElementById('scripted').focus();
};
div:focus {
    background-color: Aqua;
}
<div>Element X (not focusable)</div>
<div tabindex="0">Element Y (user or script focusable)</div>
<div tabindex="-1" id="scripted">Element Z (script-only focusable)</div>
<div id="test">Set Focus To Element Z</div>

Artículos relacionados