83 votes

Gestion des événements liés aux touches (F1 à F12) à l'aide de JavaScript et de jQuery, navigateur croisé

Je veux gérer les clés F1-F12 en utilisant JavaScript et jQuery.

Je ne suis pas sûr des pièges à éviter, et je ne suis actuellement pas en mesure de tester les implémentations dans des navigateurs autres qu'Internet Explorer 8, Google Chrome et Mozilla FireFox 3.

Des suggestions pour une solution complète multi-navigateur? Quelque chose comme une bibliothèque jQuery bien testée ou peut-être juste jQuery / JavaScript vanille?

50voto

matsev Points 6761

Je conviens avec William qu’en général, c’est une mauvaise idée de détourner les touches de fonction. Cela dit, j'ai trouvé la bibliothèque de raccourcis qui ajoute cette fonctionnalité, ainsi que d'autres raccourcis clavier et combinaisons, d'une manière très sobre.

Une seule frappe:

 shortcut.add("F1", function() {
    alert("F1 pressed");
});
 

Combinaison de frappes:

 shortcut.add("Ctrl+Shift+A", function() {
    alert("Ctrl Shift A pressed");
});
 

27voto

William Brendel Points 15453

Je ne suis pas sûr si l'interception des touches de fonction est possible, mais je voudrais éviter d'utiliser les touches de fonction tous ensemble. Les touches de fonction sont utilisés par les navigateurs pour effectuer une variété de tâches, certains d'entre eux tout à fait commun. Par exemple, dans Firefox sur Linux, au moins six ou sept touches de fonction sont réservés pour une utilisation par le navigateur:

  • F1 (Aide),
  • F3 (Recherche),
  • F5 (Actualiser),
  • F6 (mise au point de la barre d'adresse),
  • F7 (caret le mode de navigation),
  • F11 (mode plein écran), et
  • F12 (utilisé par plusieurs add-ons, y compris Firebug)

Le pire, c'est que les différents navigateurs sur différents systèmes d'exploitation utilisent des clés différentes pour différentes choses. C'est beaucoup de différences à prendre en compte. Vous devez vous en tenir à la plus sûre, moins couramment utilisé des combinaisons de touches.

27voto

mcherm Points 5209

La meilleure source que j'ai pour ce genre de question est cette page: http://www.quirksmode.org/js/keys.html

Ce qu'ils disent, c'est que les codes de clé sont étranges sur Safari et cohérents partout ailleurs (sauf qu'il n'y a pas d'événement de frappe sur IE, mais je crois que les raccourcis clavier fonctionnent.

12voto

paladinux Points 31

Sans autre classe externe, vous pouvez créer votre code de piratage personnel simplement en utilisant

 event.keyCode
 

Une autre aide pour tous, je pense, est cette page de test pour intercepter le code de clé (il suffit de copier et coller dans le nouveau fichier.html pour tester votre événement).

  <html>
 <head>
 <title>Untitled</title>
 <meta http-equiv="content-type" content="text/html; charset=iso-8859-1">
 <style type="text/css">
 td,th{border:2px solid #aaa;}
 </style>
 <script type="text/javascript">
 var t_cel,tc_ln;
 if(document.addEventListener){ //code for Moz
   document.addEventListener("keydown",keyCapt,false); 
   document.addEventListener("keyup",keyCapt,false);
   document.addEventListener("keypress",keyCapt,false);
 }else{
   document.attachEvent("onkeydown",keyCapt); //code for IE
   document.attachEvent("onkeyup",keyCapt); 
   document.attachEvent("onkeypress",keyCapt); 
 }
 function keyCapt(e){
   if(typeof window.event!="undefined"){
    e=window.event;//code for IE
   }
   if(e.type=="keydown"){
    t_cel[0].innerHTML=e.keyCode;
    t_cel[3].innerHTML=e.charCode;
   }else if(e.type=="keyup"){
    t_cel[1].innerHTML=e.keyCode;
    t_cel[4].innerHTML=e.charCode;
   }else if(e.type=="keypress"){
    t_cel[2].innerHTML=e.keyCode;
    t_cel[5].innerHTML=e.charCode;
   }
 }
 window.onload=function(){
   t_cel=document.getElementById("tblOne").getElementsByTagName("td");
   tc_ln=t_cel.length;
 }
 </script>
 </head>
 <body>
 <table id="tblOne">
 <tr>
 <th style="border:none;"></th><th>onkeydown</th><th>onkeyup</th><th>onkeypress</td>
 </tr>
 <tr>
 <th>keyCode</th><td>&nbsp;</td><td>&nbsp;</td><td>&nbsp;</td>
 </tr>
 <tr>
 <th>charCode</th><td>&nbsp;</td><td>&nbsp;</td><td>&nbsp;</td>
 </tr>
 </table>
 <button onclick="for(i=0;i<tc_ln;i++){t_cel[i].innerHTML='&nbsp;'};">CLEAR</button>
 </body>
 </html>
 

7voto

Paul D. Waite Points 35456

J'ai oublié l'endroit où je l'avais trouvé, mais Jan Wolter a également écrit une excellente page sur les événements de clavier JavaScript: http://unixpapa.com/js/key.html

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X