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?

51
demandé sur Hulk1991 2013-04-15 06:00:57

6 réponses

  1. Utiliser onkeydown (ou onkeyup), pas onkeypress
  2. 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.)

68
répondu zerkms 2017-02-22 19:55:49

Ctrl+{t[3]} est aussi possible...il suffit d'utiliser le keycode comme 84 comme

if (evtobj.ctrlKey && evtobj.keyCode == 84) 
 alert("Ctrl+t");
8
répondu chandramouli.jamadagni 2017-11-08 21:59:18

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.

3
répondu JDandChips 2017-08-15 10:45:59
$(document).keydown(function(e){
  if( e.which === 89 && e.ctrlKey ){
     alert('control + y'); 
  }
  else if( e.which === 90 && e.ctrlKey ){
     alert('control + z'); 
  }          
});

Démo

2
répondu user3542190 2015-11-09 19:48:51

Ce Plugin fait par moi peut être utile.

Greffon

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.

-1
répondu Dhruv Singhal 2017-09-16 16:58:57

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
       }
    });
-1
répondu karthikeyan ganesan 2017-09-29 09:32:49