Existe-t-il un moyen de détecter le côté sur lequel la touche Alt a été pressée (droite ou gauche)?

Existe-t-il une façon de détecter le côté sur lequel la touche Alt a été pressée, c'est-à-dire distinguer entre Alt gauche ou droit? J'ai vu quelque part que c'est possible avec IE avec les propriétés altLeft et altRight de l'objet Event . Si cela est correct, comment pouvons-nous le détecter dans Firefox avec JavaScript?

C'est comme ça que ça fonctionne dans IE pour altLeft :

 window.onload = function(){ document.getElementById('id').onkeydown = function(){ alert(window.event.altLeft); } } 

Réponse 2015

DOM3 a ajouté une propriété de location des événements clavier (voir aussi MDN ) (les versions antérieures possédaient une propriété keyLocation ) qui fait ce que vous voulez et est implémenté dans les versions récentes de tous les principaux navigateurs.

Demo:

 document.getElementById("ta").addEventListener("keydown", function(e) { var keyLocation = ["Standard", "Left", "Right", "Numpad", "Mobile", "Joystick"][e.location]; var message = "Key '" + (e.key || e.keyIdentifier || e.keyCode) + "' is down. Location: " + keyLocation; this.value += "\n" + message; e.preventDefault(); }, false); 
 <textarea id="ta" rows="10" cols="50">Click on here and press some modifier keys such as Shift</textarea> 

Bonne question. L'objet événement ne contient rien sur lequel alt est pressé mais vous pouvez essayer quelque chose comme ceci:

 var altLeft = false, altRight = false, time = null; document.onkeydown = function (e) { e = e || window.event; //The time check is because firefox triggers alt Right + alt Left when you press alt Right so you must skip alt Left if it comes immediatelly after alt Right if (e.keyCode === 18 && (time === null || ((+new Date) - time) > 50)) { altLeft = true; time = null; } else if (e.keyCode === 17) { altRight = true; time = + new Date; } } document.onkeyup = function (e) { e = e || window.event; if (e.keyCode === 18) altLeft = false; else if (e.keyCode === 17) altRight = false; } document.onclick = function () { console.log("left", altLeft, "right", altRight); } 

Cela fonctionne pour moi dans Firefox, de toute façon, les 17 et 18 (qui sont des codes clés pour Alt et Gauche) peuvent changer sur différents navigateurs ou systèmes d'exploitation, donc vous devez les vérifier.

 <html> <head> <title></title> <script type="text/javascript"> flag = 0; text = ['else', 'Ctrl', 'AltGr', 'Alt']; function key_down(e) { var aa = e.keyCode; if (aa == 18) { event.keyCode = 0; event.returnValue = false; } this_key(aa); } function this_key(fn1) { if (fn1 == 17) { flag = 1; timer = setTimeout('this_key(1)', 10); return; } if (fn1 == 18 && flag == 1) { clearTimeout(timer); } var aa = 0; if (fn1 == 1) { aa = 1; } if (fn1 == 18) { if (flag == 1) { aa = 2; } else { aa = 3; } } document.getElementById('result').innerHTML = text[aa]; flag = 0; } </script> </head> <body onkeydown="key_down(event);"> <div id="result" style="font-size: 5em;"></div> </body> </html> 

Voici ma solution