El Atributo ONKEYDOWN

Es un evento de JavaScript que se activa cuando el usuario presiona una tecla.
El atributo onkeydown es un evento de JavaScript que se activa cuando el usuario presiona una tecla (antes de soltarla). Es útil para manejar interacciones de teclado en tiempo real, crear atajos de teclado, validar entradas o controlar elementos multimedia/juegos.
¿Dónde se aplica?
Funciona en elementos que pueden recibir foco:
-
<input>(todos los tipos). -
<textarea>. -
<select>. -
Elementos con
tabindex(ej:<div tabindex="0">). -
El objeto global
documentowindow.
Sintaxis básica
Como atributo HTML (inline):
<input type="text" onkeydown="console.log('Tecla presionada:', event.key)">
Con JavaScript (recomendado):
document.addEventListener("keydown", (e) => { console.log("Tecla:", e.key, "Código:", e.code); });
Ejemplos prácticos
Ejemplo 1: Bloquear teclas específicas
<input type="text" placeholder="No números"
onkeydown="if (event.key >= '0' && event.key <= '9') event.preventDefault()">
Ejemplo 2: Atajo de teclado (Ctrl + S)
document.addEventListener("keydown", (e) => {
if (e.ctrlKey && e.key === "s") {
e.preventDefault();
guardarDocumento(); // Función personalizada
}
});
Ejemplo 3: Movimiento con flechas en un juego
<div id="jugador" style="position: absolute; left: 50px; top: 50px;">▲</div>
<script>
const jugador = document.getElementById("jugador");
let posX = 50, posY = 50;
document.addEventListener("keydown", (e) => {
const velocidad = 10;
switch(e.key) {
case "ArrowUp": posY -= velocidad; break;
case "ArrowDown": posY += velocidad; break;
case "ArrowLeft": posX -= velocidad; break;
case "ArrowRight": posX += velocidad; break;
}
jugador.style.transform = `translate(${posX}px, ${posY}px)`;
});
</script>
Propiedades clave del evento keydown
Accede a información útil desde el objeto event:
-
event.key: Nombre de la tecla (ej:"Enter","a","Escape"). -
event.code: Código físico de la tecla (ej:"KeyA","ArrowLeft"). -
event.ctrlKey,event.shiftKey,event.altKey: Estado de teclas modificadoras. -
event.repeat:truesi la tecla se mantiene presionada.
Diferencias entre eventos de teclado
| Evento | Descripción | Momento de activación |
|---|---|---|
onkeydown |
Al presionar una tecla (antes de soltar) | Inmediatamente |
onkeypress |
Al presionar una tecla que produce carácter | Obsoleto, evita su uso |
onkeyup |
Al soltar una tecla | Después de liberar |
Mejores prácticas
Usar event.key en lugar de event.keyCode:
JavaScript:
keyCode está obsoleto. event.key es más legible:
if (event.key === "Enter") { ... }
Manejar teclas modificadoras con cuidado:
JavaScript:
if (event.ctrlKey && event.key === "c") {
console.log("Ctrl + C presionado");
}
Evitar conflictos con accesos directos del navegador:
Usa event.preventDefault() con precaución para no bloquear acciones como Ctrl + R (recargar):
if (event.ctrlKey && event.key === "s") {
event.preventDefault(); // Evita el guardado del navegador
guardarDatos();
}
Accesibilidad:
-
Proporciona alternativas para usuarios que no usan teclado.
-
Usa
roleyariapara elementos interactivos.
Casos avanzados
Sistema de búsqueda con teclado:
<input type="text" id="buscador" placeholder="Buscar...">
<script>
document.getElementById("buscador").addEventListener("keydown", (e) => {
if (e.key === "/" && document.activeElement !== e.target) {
e.preventDefault();
e.target.focus();
}
});
</script>
Navegación por pestañas con teclado:
<div class="tab" tabindex="0" onkeydown="manejarTecladoTabs(event)">Tab 1</div>
<div class="tab" tabindex="0" onkeydown="manejarTecladoTabs(event)">Tab 2</div>
<script>
function manejarTecladoTabs(e) {
if (e.key === "Enter" || e.key === " ") {
e.target.click(); // Activa la pestaña al presionar Enter/Espacio
}
}
</script>
Errores comunes
<!-- MAL: Usar en elementos no enfocables -->
<div onkeydown="..."></div> <!-- No funciona sin tabindex -->
<!-- CONFUSIÓN: Usar keyCode obsoleto -->
<script>
elemento.addEventListener("keydown", (e) => {
if (e.keyCode === 13) { ... } // ¡Usar event.key === 'Enter'!
});
</script>
<!-- BLOQUEAR ACCIONES SIN AVISO -->
<script>
document.addEventListener("keydown", (e) => {
e.preventDefault(); // ¡Bloquea todas las teclas!
});
</script>
Compatibilidad
| Navegador | Soporte | Notas |
|---|---|---|
| Chrome | ✅ Todas versiones | |
| Firefox | ✅ v12+ | |
| Safari | ✅ v6.1+ | |
| Edge | ✅ Todas versiones | |
| Móviles | ✅ Sí (iOS/Android) | Teclados virtuales pueden variar |
Conclusión
El atributo onkeydown es esencial para:
- Crear interacciones avanzadas con el teclado.
- Implementar atajos profesionales (ej: Ctrl+S, flechas para juegos).
- Mejorar la accesibilidad en aplicaciones web.
Recuerda:
- Evita depender de
keyCode(usaevent.keyoevent.code). - Prueba en diferentes teclados (QWERTY, AZERTY, etc.).
- Respeta las convenciones de accesibilidad (ej:
tabindex).
¡Ahora puedes crear experiencias interactivas controladas por teclado como un profesional!