Détection de touches de combinaison (contrôle, Alt, Maj)?
je suis en train de faire un script à exécuter lorsque Ctrl+ Alt+ e est enfoncée.
Comment Tampermonkey peut-il tirer sur une clé simultanée ctrl, alt et e?
j'ai essayé ctrlKey et altKey. Je n'ai rien trouvé qui fonctionne.
Comment puis-je éditer le script ci-dessous pour tirer sur Ctrl+ Alt+ e au lieu de e<!--5?
(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();
}
});
})();
2 réponses
reportez-vous à le W3C spec pour les événements de clavier. Plusieurs attributs booléens sont fournis pour déterminer si touches de modification ont été pressés en conjonction avec la touche cible qui vous intéresse. Ils sont les suivants:
ctrlKey-- la touche" Contrôle " a aussi été pressée.shiftKey-- la touche" Shift " a aussi été pressée.altKey-- la touche" Alt " a aussi été pressée.metaKey-- Le La touche" Meta " a aussi été pressée.
Autres notes importantes:
whichla propriété est dépréciée.- Utiliser
keydownparce que Chrome ne tire pas lekeypressévénement pour les raccourcis clavier connus. - Quelques caractéristiques techniques de propriétés, telles que
keyqui sont seulement partiellement fonctionnel dans Firefox. - vous n'avez pas besoin d'emballer votre code une fonction anonyme comme celle pour Tampermonkey (ou Greasemonkey ou la plupart des moteurs userscript). La protection de la portée est automatiquement assurée.
ainsi, votre code deviendrait:
document.addEventListener ("keydown", function (zEvent) {
if (zEvent.ctrlKey && zEvent.altKey && zEvent.code === "KeyE") {
// DO YOUR STUFF HERE
}
} );
Exécuter cette pratique démo:
var targArea = document.getElementById ("keyPrssInp");
targArea.addEventListener ('keydown', reportKeyEvent);
function reportKeyEvent (zEvent) {
var reportStr =
"The " +
( zEvent.ctrlKey ? "Control " : "" ) +
( zEvent.shiftKey ? "Shift " : "" ) +
( zEvent.altKey ? "Alt " : "" ) +
( zEvent.metaKey ? "Meta " : "" ) +
zEvent.code + " " +
"key was pressed."
;
$("#statusReport").text (reportStr);
//--- Was a Ctrl-Alt-E combo pressed?
if (zEvent.ctrlKey && zEvent.altKey && zEvent.code === "KeyE") {
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>
keypress événement est déclenché dès qu'une touche a été pressée. Si vous appuyez sur plusieurs touches, cela déclenche l'événement pour chaque presse, de sorte qu'elles sont considérées comme des presses à clés indépendantes.
a la place, vous pouvez utiliser les deux keydown et keyup événements pour détecter de multiples pressions sur les touches. Vous pouvez avoir un objet qui contient les 3 clés et un boolean etat. Sur le keydown événement, si la clé correspond à une clé dans l'objet, vous pouvez définir l'état d' true pour cette clé. Sur le keyup event, vous réinitialisez l'état de la touchefalse. Si les 3 états sont true à l'heure de la dernière touche, puis déclenche l'événement.
Voir cet exemple qui réalise cette logique en utilisant jQuery.
mise à Jour
La réponse de Brock est une meilleure solution pour vous en utilisant des touches modificatrices en combinaison avec une seule cible de code clé, comme le ctrlKey et altKey les modificateurs sont détectés en combinaison et ne sont pas manipulés indépendamment. Si vous voulez détecter plusieurs codes clés comme,E et F ensemble, par exemple, vous devez garder une trace d'eux en utilisant keydown et keyup comme indiqué ci-dessus.