teclas teclado tecla retroceso presionar especiales detectar combinacion capturar atajos javascript combinations ctrl

teclado - Capturando combinación de teclas ctrl+z en javascript



tecla retroceso javascript (6)

Estoy intentando capturar la combinación de teclas ctrl + z en javascript con este código:

<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>

La línea comentada "test1" genera la alerta si mantengo presionada la tecla ctrl y presiono cualquier otra tecla.

La línea comentada "test2" genera la alerta si presiono la tecla z .

Póngalos juntos según la línea después de "prueba 1 y 2", y al mantener presionada la tecla ctrl y luego presionar la tecla z no se genera la alerta como se esperaba.

¿Qué está mal con el código?


  1. Use onkeydown (o onkeyup ), no onkeypress
  2. Utilice keyCode 90, no 122

Demostración en línea: http://jsfiddle.net/29sVC/

Para aclarar, los códigos clave no son lo mismo que los códigos de caracteres.

Los códigos de caracteres son para texto (difieren según la codificación, pero en muchos casos, los códigos de ASCII siguen siendo 0-127). Los códigos de teclas se asignan a las teclas de un teclado. Por ejemplo, en unicode el carácter 0x22909 significa. No hay muchos teclados (si los hay) que tengan una clave para esto.

El sistema operativo se encarga de transformar las pulsaciones de teclas en códigos de caracteres utilizando los métodos de entrada que el usuario configuró. Los resultados se envían al evento keypress. (Mientras keydown y keyup responden al usuario presionando los botones, no escribiendo texto).


90 es la tecla Z y esto hará la captura necesaria ...

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 } }

Dependiendo de sus requisitos, es posible que desee agregar un e.preventDefault(); dentro de su declaración if para realizar exclusivamente su funcionalidad personalizada.


Este complemento hecho por mí puede ser útil.

Plugin

Puede usar este complemento; debe proporcionar los Códigos clave y la función para ejecutar de esta manera.

simulatorControl([17,90], function(){console.log(''You have pressed Ctrl+Z'');});

En el código que he mostrado cómo realizar para Ctrl + Z. Obtendrá documentación detallada en el enlace. El complemento está en la sección de código JavaScript de mi pluma en Codepen.


Utilice este código para CTRL + Z. el código de tecla para Z en la pulsación de tecla es 122 y CTRL + Z es 26. verifique este código de tecla en el área de la consola

$(document).on("keypress", function(e) { console.log(e.keyCode); /*ctrl+z*/ if(e.keyCode==26) { //your code here } });


Ctrl + t también es posible ... solo usa el código clave como 84 me gusta

if (evtobj.ctrlKey && evtobj.keyCode == 84) alert("Ctrl+t");


$(document).keydown(function(e){ if( e.which === 89 && e.ctrlKey ){ alert(''control + y''); } else if( e.which === 90 && e.ctrlKey ){ alert(''control + z''); } });

Demo