¿Cómo capturo un evento de pulsación de tecla (o pulsación de tecla) en un elemento div?

3 minutos de lectura

Avatar de usuario de Lalchand
Lalchand

¿Cómo se captura el evento de pulsación de tecla o de pulsación de tecla en un elemento DIV (usando jQuery)?

¿Qué se requiere para darle el foco al elemento DIV?

  • ¿Qué significa “enfoque” para un div?

    – Jonathan Fausto

    30 de junio de 2010 a las 12:57

  • jboyd además de tabular cuando tiene un tabindex, puede usar javascript para encontrarlo y llamar al método de enfoque en él.

    –Brendan Enrick

    30 de junio de 2010 a las 12:57

  • @Lalchand … ¿puedes aceptar mi respuesta en algún momento? 🙂

    – hola

    3 oct 2016 a las 13:41

avatar de usuario de helle
hola

(1) Establecer el tabindex atributo:

<div id="mydiv" tabindex="0" />

(2) Vincular a keydown:

 $('#mydiv').on('keydown', function(event) {
    //console.log(event.keyCode);
    switch(event.keyCode){
       //....your actions for the keys .....
    }
 });

Para establecer el enfoque en el inicio:

$(function() {
   $('#mydiv').focus();
});

Para quitar – si no te gusta – el div borde de enfoque, establecer outline: none en el CSS.

Ver la tabla de códigos clave para más keyCode posibilidades.

Todo el código asumiendo que usas jQuery.

#

  • +1 tabindex es el punto clave aquí para hacer que el div sea ‘seleccionable’. JQuery no es necesario, lo mismo funciona con Angular y (supongo) con eventos simples de JavaScript.

    – Jukka Dahlbom

    12 de febrero de 2014 a las 10:57


  • ¿Cuál es el soporte del navegador para esto?

    – conocida asilya

    19 de noviembre de 2014 a las 20:06

  • tabindex es una parte clave, pero no lo establezca en ningún valor que no sea “0”. Hacer que sea algo por encima de 0 va a estropear los lectores de pantalla para los usuarios con discapacidades visuales (se saltará todo en la página e irá directamente a cualquier tabindex por encima de 0). tabindex=”0″ lo hace “tabable”. puedes tener infinitos elementos con tabindex=”0″

    – zonabi

    29 de febrero de 2016 a las 18:26


  • ¡También funciona con

    !
                    
                  
    – dfmiller
    15/03/2016 a las 15:45
  • ¡Excelente! Me faltaba el atributo tabindex, tal vez porque los DIV no pueden recibir el foco a menos que tengan un tabindex. ¡Gracias hombre! ¡Salvó mi vida! EDITAR: también funciona con React
    – Vinícius Negrão
    16 de febrero de 2017 a las 19:31

Avatar de usuario de Илья Зеленько
Илья Зеленько

Aquí ejemplo en JS simple:

document.querySelector('#myDiv').addEventListener('keyup', function (e) {
  console.log(e.key)
})
#myDiv {
  outline: none;
}
<div 
  id="myDiv"
  tabindex="0"
>
  Press me and start typing
</div>

  • usaría un tabindex="-1" ya que "Los eventos de teclado solo son generados por ,

    – Ludovic Kuti

    18 de agosto de 2022 a las 6:42

avatar de usuario de nkshio
nkshio

tabindex El atributo HTML indica si se puede enfocar su elemento y si/dónde participa en la navegación secuencial del teclado (generalmente con el Tab llave). Leer Documentos web de MDN para referencia completa.

Usando Jquery

$( "#division" ).keydown(function(evt) {
    evt = evt || window.event;
    console.log("keydown: " + evt.keyCode);
});
#division {
  width: 90px;
  height: 30px;
  background: lightgrey;
}
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>

<div id="division" tabindex="0"></div>

Usando JavaScript

var el = document.getElementById("division");

el.onkeydown = function(evt) {
    evt = evt || window.event;
    console.log("keydown: " + evt.keyCode);
};
#division {
  width: 90px;
  height: 30px;
  background: lightgrey;
}
<div id="division" tabindex="0"></div>

  • De hecho, encontré esto buscando un problema con el disparo del evento de enfoque cuando los controles en el div perdieron el foco, digamos que haga clic en la barra de desplazamiento de divs, simplemente agregar el tabulador al div fue la solución, así que muchas gracias

    – MikeT

    22 de noviembre de 2018 a las 14:29


¿Ha sido útil esta solución?