javascript - teclas - eventos de teclado jquery
¿Hay alguna forma de detectar en qué lado se presionó la tecla Alt(derecha o izquierda)? (3)
¿Hay alguna manera de que podamos detectar en qué lado se presionó la tecla Alt , es decir, distinguir entre Alt izquierda o derecha? Vi en algún lugar que es posible con IE con las propiedades altLeft
y altRight
del objeto Event
. Si eso es correcto, ¿cómo podemos detectarlo en Firefox con JavaScript?
Así es como funciona en IE para altLeft
:
window.onload = function(){
document.getElementById(''id'').onkeydown = function(){
alert(window.event.altLeft);
}
}
Respuesta 2015
DOM3 agregó una propiedad de location
de eventos de teclado (vea también MDN ) (las versiones anteriores tenían una propiedad keyLocation
) que hace lo que quiere y se implementa en versiones recientes de todos los principales navegadores.
Manifestación:
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>
Respuesta 2011
No. En general, es imposible distinguir entre las teclas modificadoras izquierda y derecha en un navegador cruzado. Las shiftLeft
, shiftRight
, ctrlLeft
, ctrlRight
, altLeft
, altRight
de window.event
son solo IE y no existen equivalentes en otros navegadores.
DOM3 agregó una propiedad de location
de eventos de teclado (las versiones anteriores tenían una propiedad keyLocation
lugar) pero Firefox no implementa esto.
Buena pregunta. El objeto de evento no contiene nada sobre qué Alt se presiona, pero puedes intentar algo como esto:
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);
}
A mí me funciona en Firefox, de todos modos, los 17 y 18 (que son códigos clave para alt Right y Left) pueden cambiar en diferentes navegadores o sistemas operativos, por lo que debe verificarlos.
<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>
Aquí está mi solución