Capture d'un événement de pression de touche (ou de touche enfoncée) sur l'élément DIV

146

Comment intercepter l'événement keypress ou key down sur un élément DIV (en utilisant jQuery)?

Que faut-il pour donner le focus à l'élément DIV?

Lalchand
la source
2
Que signifie «focus» pour une div?
Jonathon Faust
1
jboyd autre que la tabulation quand il a un tabindex, vous pouvez utiliser javascript pour le trouver et appeler la méthode de focus dessus.
Brendan Enrick
2
@Lalchand ... pouvez-vous accepter ma réponse un moment? :)
helle

Réponses:

301

(1) Définissez l' tabindexattribut:

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

(2) Lier au keydown:

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

Pour définir le focus sur le démarrage:

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

Pour supprimer - si vous ne l'aimez pas - la divbordure de focus, définissez-la outline: nonedans le CSS.

Consultez le tableau des codes clés pour plus de keyCodepossibilités.

Tout le code en supposant que vous utilisez jQuery.

#
helle
la source
43
+1 tabindex est le point clé ici pour rendre le div «sélectionnable». JQuery n'est pas nécessaire, la même chose fonctionne avec Angular ainsi que (je suppose) avec des événements javascript simples.
Jukka Dahlbom
4
Quelle est la prise en charge du navigateur pour cela?
knownasilya
27
tabindex est un élément clé, mais ne le définissez pas sur une valeur autre que "0". Faire quelque chose au-dessus de 0 va gâcher les lecteurs d'écran pour les utilisateurs malvoyants (cela sautera tout sur la page et ira directement à n'importe quel tabindex au-dessus de 0). tabindex = "0" le rend "tabable". vous pouvez avoir des éléments infinis avec tabindex = "0"
zonabi
2
Fonctionne également avec <pre>!
dfmiller
2
Excellent! Il me manquait l'attribut tabindex, peut-être parce que les DIV ne peuvent pas recevoir le focus à moins qu'ils n'aient un tabindex. Merci mec! Sauvé ma vie! EDIT: fonctionne également avec React
Vinícius Negrão
6

Voici un exemple sur 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>

Илья Зеленько
la source
Comment cela répond-il à la question?
Poul Bak
5

L' attribut HTML tabindex indique si son élément peut être focalisé, et si / où il participe à la navigation séquentielle au clavier (généralement avec la Tabtouche). Lisez MDN Web Docs pour une référence complète.

Utilisation de Jquery

Utilisation de JavaScript

nkshio
la source
1
En fait, j'ai trouvé cela à la recherche d'un problème avec l'événement de mise au point qui se déclenchait lorsque les contrôles de la div perdaient le focus disent de cliquer sur la barre de défilement divs, ajouter simplement l'arrêt de tabulation à la div était le correctif, alors merci beaucoup
MikeT