Estoy tratando de capturar ctrl+ zcombinación de teclas 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 ctrltecla y presiono cualquier otra tecla.
La línea comentada "test2" genera la alerta si presiono la ztecla.
Póngalos juntos según la línea después de "prueba 1 y 2", y mantener presionada la ctrltecla y luego presionar la ztecla no genera la alerta como se esperaba.
¿Qué pasa con el código?
fuente
ctrl+t
122
es para la tecla F11 :)keypress
evento. (Considerando quekeydown
ykeyup
responder al usuario presionando botones, no escribiendo texto.)Para las personas futuras que se encuentren con esta pregunta, aquí hay un método mejor para hacer el trabajo:
document.addEventListener('keydown', function(event) { if (event.ctrlKey && event.key === 'z') { alert('Undo!'); } });
Usar
event.key
simplifica enormemente el código, eliminando constantes codificadas. Tiene soporte para IE 9+.Además, usar
document.addEventListener
significa que no golpeará a otros oyentes en el mismo evento.Finalmente, no hay razón para usar
window.event
. Se desaconseja activamente y puede resultar en un código frágil.fuente
KeyboardEvent.keyCode
ahora está en desuso desde hace un par de años. La mejor forma de capturar todos los navegadores es comprobare.key
primero y luego volver ae.keyCode
. O puede usar este polyfillCtrl+ ttambién es posible ... simplemente use el código clave como 84 como
if (evtobj.ctrlKey && evtobj.keyCode == 84) alert("Ctrl+t");
fuente
$(document).keydown(function(e){ if( e.which === 89 && e.ctrlKey ){ alert('control + y'); } else if( e.which === 90 && e.ctrlKey ){ alert('control + z'); } });
Manifestación
fuente
90 es la Zclave y esta 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 una
e.preventDefault();
dentro de su declaración if para realizar exclusivamente su funcionalidad personalizada.fuente
Este complemento creado por mí puede ser útil.
Enchufar
Puede usar este complemento, debe proporcionar los códigos clave y la función para que se ejecute así
simulatorControl([17,90], function(){console.log('You have pressed Ctrl+Z');});
En el código, he mostrado cómo actuar para Ctrl+ Z. Obtendrá documentación detallada en el enlace. El complemento está en la sección de código JavaScript de mi lápiz en Codepen.
fuente
Utilice este código para CTRL+ Z. El código clave para presionar una Ztecla es 122 y el CTRL+ Zes 26. Verifique este código clave en el área de su consola
$(document).on("keypress", function(e) { console.log(e.keyCode); /*ctrl+z*/ if(e.keyCode==26) { //your code here } });
fuente