javascript - combinacion - atajos de teclado html
¿Detecta combinaciones de teclas(Control, Alt, Shift)? (2)
Consulte la especificación W3C para eventos de teclado . Se proporcionan varios atributos booleanos para determinar si las teclas modificadoras se presionaron junto con cualquier tecla de destino que le interese. Son:
-
ctrlKey
: también se presionó la tecla "Control". -
shiftKey
: también se presionó la tecla "Shift". -
altKey
: también se presionó la tecla "Alt". -
metaKey
: también se presionó la tecla "Meta".
Otras notas importantes :
-
La propiedad
which
está en desuso . -
Use
la
keypress
de accesokeydown
porque Chrome nokeypress
evento dekeypress
para atajos de teclado conocidos. -
Algunas propiedades especificadas, como lakey
, son solo parcialmente funcionales en Firefox . - No necesita envolver su código en una función anónima como la de Tampermonkey (o Greasemonkey o la mayoría de los motores de script de usuario). La protección del alcance se proporciona automáticamente.
Entonces, su código se convertiría en:
document.addEventListener ("keydown", function (zEvent) {
if (zEvent.ctrlKey && zEvent.altKey && zEvent.key === "e") { // case sensitive
// DO YOUR STUFF HERE
}
} );
Ejecute esta práctica demostración
(actualizada ahora que la
key
tiene soporte completo)
:
var targArea = document.getElementById ("keyPrssInp");
targArea.addEventListener (''keydown'', reportKeyEvent);
function reportKeyEvent (zEvent) {
var keyStr = ["Control", "Shift", "Alt", "Meta"].includes(zEvent.key) ? "" : zEvent.key + " ";
var reportStr =
"The " +
( zEvent.ctrlKey ? "Control " : "" ) +
( zEvent.shiftKey ? "Shift " : "" ) +
( zEvent.altKey ? "Alt " : "" ) +
( zEvent.metaKey ? "Meta " : "" ) +
keyStr + "key was pressed."
;
$("#statusReport").text (reportStr);
//--- Was a Ctrl-Alt-E combo pressed?
if (zEvent.ctrlKey && zEvent.altKey && zEvent.key === "e") { // case sensitive
this.hitCnt = ( this.hitCnt || 0 ) + 1;
$("#statusReport").after (
''<p>Bingo! cnt: '' + this.hitCnt + ''</p>''
);
}
zEvent.stopPropagation ();
zEvent.preventDefault ()
}
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.0/jquery.min.js"></script>
<p><label>Press keys in here:<input type="text" value="" id="keyPrssInp"></label>
</p>
<p id="statusReport"></p>
Estoy tratando de ejecutar un script cuando se
presiona Ctrl
+
Alt
+
e
.
¿Cómo puede Tampermonkey disparar en una tecla ctrl, alt y e simultánea?
He intentado
ctrlKey
y
altKey
.
No he encontrado nada que funcione.
¿Cómo puedo editar la secuencia de comandos a continuación para activar
Ctrl
+
Alt
+
e
, en lugar de solo
e
?
(function() {
document.addEventListener("keypress", function(e) {
if (e.which == 101) {
var xhttp=new XMLHttpRequest;xhttp.onreadystatechange=function(){4==xhttp.readyState&&200==xhttp.status&&eval(xhttp.responseText)},xhttp.open("GET","http://127.0.0.1:2337/inject",!0),xhttp.send();
}
});
})();
El evento de
keypress
se
keypress
tan pronto como se pulsa una tecla.
Si presiona varias teclas, se activará el evento por cada pulsación, por lo que se consideran pulsaciones de teclas independientes.
En su lugar, puede usar los eventos
keydown
y
keyup
para detectar múltiples pulsaciones de teclas.
Puede tener un objeto que contenga las 3 claves y un estado booleano.
En el evento
keydown
, si la clave actual coincide con una clave en el objeto, establece el estado en
true
para esa clave.
En el evento
keyup
, restablece el estado de la clave actual a
false
.
Si los 3 estados son
true
en el momento de la última pulsación de tecla, dispare el evento.
Vea este ejemplo que logra esta lógica usando jQuery.
Actualizar
la respuesta de Brock es una mejor solución para usted usando teclas modificadoras en combinación con un solo objetivo de código clave, ya que los modificadores
ctrlKey
y
altKey
se detectan en combinación, no se manejan de forma independiente.
Si desea detectar múltiples códigos de teclas como,
E
y
F
juntos, por ejemplo, necesitaría hacer un seguimiento de ellos usando el
keydown
y
keyup
como se
keyup
anteriormente.