Capture de la combinaison de touches ctrl+z en javascript
Je suis en train d'essayer de capturer ctrl+z clé de combinaison en javascript avec ce code:
<html>
<head>
<title>Untitled Document</title>
</head>
<body>
<script type='text/javascript'>
function KeyPress(e) {
var evtobj = window.event? event : e
//test1 if (evtobj.ctrlKey) alert("Ctrl");
//test2 if (evtobj.keyCode == 122) alert("z");
//test 1 & 2
if (evtobj.keyCode == 122 && evtobj.ctrlKey) alert("Ctrl+z");
}
document.onkeypress = KeyPress;
</script>
</body>
</html>
Ligne commentée "test1" génère l'alerte si je maintiens la touche ctrl et appuie sur une autre touche.
Ligne commentée "test2" génère l'alerte si j'appuie sur la touche z.
Mettez-les ensemble selon la ligne après "test 1 & 2", et en maintenant la touche ctrl enfoncée, puis en appuyant sur la touche z ne génère pas l'alerte comme devrait.
Quel est le problème avec le code?
6 réponses
- Utiliser
onkeydown
(ouonkeyup
), pasonkeypress
- Utiliser
keyCode
90, pas 122
Démo en Ligne: http://jsfiddle.net/29sVC/
Pour clarifier, les codes-clés ne sont pas les mêmes que les codes de caractères.
Les codes de caractères sont pour le texte (ils diffèrent en fonction de l'encodage, mais dans beaucoup de cas 0-127 restent des codes ASCII). Les codes clés correspondent aux touches d'un clavier. Par exemple, dans le caractère unicode 0x22909 signifie 好. Il n'y a pas beaucoup de claviers (le cas échéant) qui en fait avoir une clé pour cela.
Le système d'exploitation s'occupe de transformer les frappes en codes de caractères en utilisant les méthodes d'entrée configurées par l'utilisateur. Les résultats sont envoyés à l'événement keypress. (Alors que keydown et keyup répondent à l'utilisateur en appuyant sur les boutons, pas en tapant du texte.)
Ctrl+{t[3]} est aussi possible...il suffit d'utiliser le keycode comme 84 comme
if (evtobj.ctrlKey && evtobj.keyCode == 84)
alert("Ctrl+t");
90 est la clé Z et cela fera la capture nécessaire...
function KeyPress(e){
// Ensure event is not null
e = e || window.event;
if ((e.which == 90 || e.keyCode == 90) && e.ctrlKey) {
// Ctrl + Z
// Do Something
}
}
Selon vos besoins, vous pouvez ajouter un e.preventDefault();
dans votre instruction if pour exécuter exclusivement vos fonctionnalités personnalisées.
$(document).keydown(function(e){
if( e.which === 89 && e.ctrlKey ){
alert('control + y');
}
else if( e.which === 90 && e.ctrlKey ){
alert('control + z');
}
});
Ce Plugin fait par moi peut être utile.
Vous pouvez utiliser ce plugin vous devez fournir les Codes clés et la fonction à exécuter comme ceci
simulatorControl([17,90], function(){console.log('You have pressed Ctrl+Z');});
Dans le code que j'ai affiché comment effectuer pour Ctrl+Z. Vous obtiendrez une Documentation détaillée sur le lien. Plugin est dans la section de code JavaScript de mon stylo sur Codepen.
Utiliser ce code pour CTRL+Z. le code de touche pour Z en appuyant sur la touche est 122 et le CTRL+Z est 26. vérifiez ce code-clé dans la zone de votre console
$(document).on("keypress", function(e) {
console.log(e.keyCode);
/*ctrl+z*/
if(e.keyCode==26)
{
//your code here
}
});