Estou tentando capturar ctrl+ zcombinação de teclas em javascript com 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>
A linha comentada "test1" gera o alerta se eu segurar a ctrltecla e pressionar qualquer outra tecla.
A linha comentada "test2" gera o alerta se eu pressionar a ztecla.
Coloque-os juntos de acordo com a linha após "teste 1 e 2" e mantenha a ctrltecla pressionada e, em seguida, pressione a ztecla para gerar o alerta como esperado.
O que há de errado com o código?
fonte
ctrl+t
122
é para a tecla F11 :)keypress
evento. (Considerando quekeydown
ekeyup
responder ao usuário pressionando botões, não digitando texto.)Para as pessoas que vierem a tropeçar nesta questão, aqui está um método melhor para fazer o trabalho:
document.addEventListener('keydown', function(event) { if (event.ctrlKey && event.key === 'z') { alert('Undo!'); } });
Usar
event.key
simplifica bastante o código, removendo constantes codificadas. Possui suporte para IE 9+.Além disso, usar
document.addEventListener
significa que você não afetará outros ouvintes no mesmo evento.Finalmente, não há razão para usar
window.event
. É ativamente desencorajado e pode resultar em código frágil.fonte
KeyboardEvent.keyCode
agora está obsoleto há alguns anos. A melhor maneira de capturar todos os navegadores é verificare.key
primeiro e depois voltar parae.keyCode
. Ou você pode usar este polyfillCtrl+ ttambém é possível ... basta usar o código-chave como 84 como
if (evtobj.ctrlKey && evtobj.keyCode == 84) alert("Ctrl+t");
fonte
$(document).keydown(function(e){ if( e.which === 89 && e.ctrlKey ){ alert('control + y'); } else if( e.which === 90 && e.ctrlKey ){ alert('control + z'); } });
Demo
fonte
90 é a Zchave e isso fará a captura necessária ...
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 } }
Dependendo de seus requisitos, você pode desejar adicionar uma
e.preventDefault();
declaração if para executar exclusivamente sua funcionalidade personalizada.fonte
document.onkeydown = function (e) { var special = e.ctrlKey || e.shiftKey; var key = e.charCode || e.keyCode; console.log(key.length); if (special && key == 38 || special && key == 40 ) { // enter key do nothing e.preventDefault(); } }
aqui está uma maneira de bloquear duas teclas, Shift + ou Ctrl + combinações de teclas.
&& ajuda com as combinações de teclas, sem as combinações, bloqueia todas as teclas ctrl ou shift.
fonte
Este plug-in feito por mim pode ser útil.
Plugar
Você pode usar este plugin; você deve fornecer os códigos-chave e a função para funcionar assim
simulatorControl([17,90], function(){console.log('You have pressed Ctrl+Z');});
No código, mostrei como executar para Ctrl+ Z. Você obterá documentação detalhada no link. O plugin está na seção Código JavaScript da minha caneta no Codepen.
fonte
Use este código para CTRL+ Z. o código para Zem keypress é 122 e o CTRL+ Zé 26. verifique este código na área do console
$(document).on("keypress", function(e) { console.log(e.keyCode); /*ctrl+z*/ if(e.keyCode==26) { //your code here } });
fonte