El Atributo ONFOCUS

Es un evento de JavaScript que se activa cuando un elemento HTML recibe el foco, es decir, cuando el usuario selecciona o interactúa con él.
El atributo onfocus es un evento de JavaScript que se activa cuando un elemento HTML recibe el foco, es decir, cuando el usuario selecciona o interactúa con él (mediante clic, tecla Tab, o programáticamente). Es esencial para mejorar la accesibilidad, validar formularios en tiempo real y crear interfaces interactivas.
¿Dónde se aplica?
Funciona en elementos que pueden recibir foco:
-
<input>(todos los tipos:text,email,password, etc.). -
<textarea>. -
<select>. -
<a>(si tienehrefotabindex). -
Elementos con
tabindexdefinido (ej:<div tabindex="0">).
Sintaxis básica
Como atributo HTML (inline):
<input type="text" onfocus="console.log('Campo enfocado')">
Con JavaScript (recomendado para separar lógica):
const input = document.getElementById("miInput");
input.addEventListener("focus", (e) => {
e.target.style.backgroundColor = "#e3f2fd";
});
Ejemplos prácticos
Ejemplo 1: Resaltar campo activo
HTML:
<input type="email" placeholder="Correo electrónico" id="email">
CSS:
/* Estilo al recibir foco */
input:focus {
border: 2px solid #2196F3;
}
.resaltado {
background: #e3f2fd;
}
JavaScript:
document.getElementById("email").addEventListener("focus", function(e) {
this.classList.add("resaltado");
});
document.getElementById("email").addEventListener("blur", function(e) {
this.classList.remove("resaltado");
});
Ejemplo 2: Mostrar ayuda contextual
<input type="password" id="password" placeholder="Contraseña" onfocus="mostrarAyuda()">
<div id="ayuda" style="display: none;">Mínimo 8 caracteres</div>
<script>
function mostrarAyuda() {
document.getElementById("ayuda").style.display = "block";
}
document.getElementById("password").addEventListener("blur", () => {
document.getElementById("ayuda").style.display = "none";
});
</script>
Ejemplo 3: Validación temprana
<input type="number" id="edad" placeholder="Edad" onfocus="validarEdad(this)">
<script>
function validarEdad(campo) {
if (campo.value < 18) {
campo.style.border = "2px solid red";
mostrarError("Debes ser mayor de 18 años");
}
}
</script>
Diferencias clave entre eventos relacionados
| Evento | Descripción | Momento de activación |
|---|---|---|
onfocus |
Al recibir foco | Al seleccionar el elemento |
onblur |
Al perder el foco | Al salir del elemento |
onfocusin |
Similar a onfocus, pero propaga el evento |
Versión "burbujeante" de focus |
onchange |
Al cambiar el valor y perder el foco | Después de modificar el campo |
Mejores prácticas
Accesibilidad:
Asegúrate de que los elementos enfocables sean navegables con el teclado (Tab).
Usa aria-describedby para vincular mensajes de ayuda:
<input id="username" aria-describedby="ayudaUsuario" onfocus="mostrarAyuda()"> <div id="ayudaUsuario" hidden>Ejemplo: usuario123</div>
No abuses de los estilos:
Evita cambios visuales bruscos que distraigan al usuario. Usa transiciones CSS suaves:
input { transition: background 0.3s ease; }
Manejo programático del foco:
Enfoca elementos dinámicamente usando .focus():
if (error) {
document.getElementById("campoError").focus();
}
Casos avanzados
Enfoque en Single Page Applications (SPA):
// Enfocar el primer campo al cargar un formulario
window.addEventListener("load", () => {
document.querySelector("form [autofocus]").focus();
});
// Enfocar después de una transición
setTimeout(() => {
document.getElementById("busqueda").focus();
}, 500);
Validación en tiempo real con onfocus:
<input type="text" id="tarjeta" placeholder="Número de tarjeta"
onfocus="validarFormatoTarjeta(this)" oninput="validarFormatoTarjeta(this)" > <script> function validarFormatoTarjeta(campo) { const valor = campo.value.replace(/s/g, ""); if (!/^d{16}$/.test(valor)) { campo.setCustomValidity("Número inválido"); } else { campo.setCustomValidity(""); } } </script>
Errores comunes
<!-- MAL: Usar en elementos no enfocables -->
<div onfocus="..."></div> <!-- No funciona sin tabindex -->
<!-- CONFUSIÓN: No manejar el evento blur -->
<input onfocus="mostrarAyuda()"> <!-- La ayuda queda visible para siempre -->
<!-- SEGURIDAD: No sanitizar entradas -->
<script>
input.addEventListener("focus", () => {
// Ejecutar código no seguro sin validación
});
</script>
Compatibilidad
| Navegador/Dispositivo | Soporte | Notas |
|---|---|---|
| Chrome | ✅ Todas versiones | |
| Firefox | ✅ Todas versiones | |
| Safari | ✅ Sí (v. 4+) | |
| Edge | ✅ Todas versiones | |
| Móviles | ✅ Sí (iOS/Android) | Algunos elementos requieren tabindex |
Conclusión
El atributo onfocus es esencial para:
- Mejorar la usabilidad de formularios y elementos interactivos.
- Proporcionar feedback inmediato al usuario.
- Garantizar accesibilidad mediante navegación por teclado.
Recuerda:
- Combínalo con
onblurpara manejar ciclos completos de interacción. - Prueba en múltiples navegadores y dispositivos táctiles.
- Prioriza la accesibilidad para todos los usuarios.
¡Ahora puedes crear interfaces más intuitivas y profesionales con el manejo adecuado del foco!