Bienvenido a la Comunidad de Treehouse
¿Quieres colaborar en errores de código? ¿Tienes errores que necesitan comentarios? ¿Buscas un par de ojos adicionales en tu último proyecto? aquí.
¿Buscas aprender algo nuevo?
Treehouse ofrece una prueba gratuita de siete días para estudiantes nuevos. Obtén acceso a miles de horas de contenido y únete a miles de
Inicia tu prueba gratuita
Andrew Whatmore
JavaScript Full Stack Estudiante de Techdegree 11,380 PuntosSolución - navegación con ratón así como con tabulación
Agregar navegación con ratón y tabulación.
He intentado agregar una solución que se enfoca en clics del ratón así como navegación por tabulación.
¿Es esta la forma más eficiente de hacerlo? No se me ocurrió una forma de combinar el código en absoluto, ya que usé propagación para la navegación del ratón para ahorrar memoria, mientras que la navegación por tabulación usa un detector de eventos para cada casilla de verificación.
Muchas gracias de antemano
// Seleccionar las casillas de verificación
const casillas de verificación = documento.querySelectorAll('input[type="checkbox"]');
// Seleccionar el conjunto de campos que contiene las entradas de casilla de verificación
const checkboxSet = documento.querySelector('fieldset.heroes');
// PARA NAVEGACIÓN CON RATÓN
// Crear una variable para almacenar la casilla de verificación actual
let currentCheckbox;
// escuchar un evento de enfoque dentro del conjunto de campos
checkboxSet.addEventListener('click', (e) => {
// si el elemento en el que se hizo clic fue una casilla de verificación
if (e.target.type === checkbox) {
// borrar casilla de verificación anterior
if (currentCheckbox) {
// eliminar la clase de enfoque
currentCheckbox.classList.remove('focus');
// También eliminar la clase 'focus' del elemento de etiqueta principal
currentCheckbox.parentElement.classList.remove('focus');
}
// establecer currentCheckbox en el elemento en el que se hizo clic
currentCheckbox = e.target;
// agregar la clase 'focus' a la casilla de verificación
currentCheckbox.classList.add('focus');
// agregar la clase 'focus' al elemento de etiqueta principal
currentCheckbox.parentElement.classList.add('focus');
}
});
// PARA NAVEGACIÓN POR TABULACIÓN
// Recorrer cada casilla de verificación
casillas de verificación.forEach(checkbox => {
// Paso 3: Agregar un detector de eventos para el evento 'focus' a cada casilla de verificación
checkbox.addEventListener('focus', () => {
// Paso 3.1: Cuando una casilla de verificación obtiene el enfoque, agregar la clase 'focus' a la casilla de verificación
checkbox.classList.add('focus');
// Paso 3.2: También agregar la clase 'focus' al elemento de etiqueta principal
checkbox.parentElement.classList.add('focus');
});
// Paso 4: Agregar un detector de eventos para el evento 'blur' a cada casilla de verificación
checkbox.addEventListener('blur', () => {
// Paso 4.1: Cuando una casilla de verificación pierde el enfoque, eliminar la clase 'focus'
checkbox.classList.remove('focus');
// Paso 4.2: También eliminar la clase 'focus' del elemento de etiqueta principal
checkbox.parentElement.classList.remove('focus');
});
});
1 Respuesta
Brian Jensen
Profesor de TreehouseEsa es una solución increíble Andrew Whatmore! ¡Me encanta que hayas ido más allá y también hayas agregado activación por ratón!
Tu código es muy eficiente dentro del alcance de focus y blur, ya que estos eventos no admiten propagación de eventos completa. Hay eventos más nuevos que sí admiten propagación completa, pero actualmente no se enseñan porque aún no tienen compatibilidad total con navegadores. Estos eventos son focusin y focusout, que se pueden adjuntar directamente al elemento del formulario. De esta manera, cualquier método para activar el enfoque en una casilla de verificación activará el evento.