Localizador de código-chave JavaScript

Pressione qualquer tecla do seu teclado para ver suas propriedades de evento JavaScript.

Pressione uma tecla…

30 anos de história dos eventos de teclado em JavaScript

Nenhuma tecla pressionada ainda

Como funciona

  1. Pressione uma tecla : clique na área de entrada e pressione qualquer tecla, letras, números, teclas de função, setas, modificadores ou teclas especiais.
  2. Leia os códigos de tecla : a ferramenta exibe instantaneamente os valores event.key, event.code, event.keyCode (legado) e charCode da tecla.
  3. Use no seu código : copie os valores exatos necessários para seus listeners de eventos de teclado ou para suas implementações de atalhos.

Por que usar o detector de keycode ?

Os eventos de teclado JavaScript expõem várias propriedades diferentes (key, code, keyCode, charCode e which) e saber qual usar e com qual valor comparar é sistematicamente complicado. O detector de KeyCode elimina as adivinhações ao permitir que você pressione uma tecla e veja imediatamente todas as suas propriedades de evento. Valioso para construir atalhos de teclado, gerenciar teclas especiais, implementar hotkeys e depurar listeners de eventos de teclado.

Funcionalidades

Perguntas frequentes

Qual a diferença entre event.key e event.keyCode ?

event.key é o padrão moderno, retorna uma string legível como « ArrowLeft » ou « Enter ». event.keyCode é um código numérico legado (depreciado, mas ainda suportado). Use event.key para código novo ; event.keyCode para manter a compatibilidade com navegadores antigos.

Como detectar Ctrl+S ou outras combinações de teclas ?

As combinações de teclas usam event.key combinado a verificações de modificadores : if (event.ctrlKey && event.key === "s"). Pressione Ctrl+S nesta ferramenta para ver todos os valores, depois reproduza a mesma condição no seu listener de evento.

Por que algumas teclas exibem o mesmo keyCode ?

Os valores keyCode não foram normalizados e algumas teclas compartilham códigos conforme o contexto. event.code é mais confiável, identifica a posição física da tecla (por ex. « KeyA ») independentemente do layout do teclado, enquanto event.key reflete o caractere produzido por essa tecla.

30 anos de história dos eventos de teclado em JavaScript

Os eventos de teclado têm uma história notoriamente confusa no DOM. Netscape Navigator 2 (1995) introduziu os handlers originais onkeydown, onkeypress e onkeyup com uma propriedade numérica keyCode, que não tinha especificação; os navegadores inventaram cada um seus próprios valores. Internet Explorer 4 (1997) implementou sua própria variante com event.keyCode como única propriedade, enquanto o Netscape ficou com event.which. DOM Level 2 Events (W3C, novembro de 2000) padronizou o fluxo de eventos (captura/borbulha) mas explicitamente deixou de lado os eventos de teclado porque os fornecedores não conseguiam concordar. O resultado: desenvolvedores escreveram código como e.keyCode || e.which por mais de uma década. DOM Level 3 Events (W3C Working Draft 2003, Recomendação 2018) finalmente introduziu o moderno event.key (caractere Unicode ou tecla nomeada como «ArrowLeft») e event.code (posição física da tecla como «KeyA», independente de layout), junto com a depreciação de keyCode, charCode e which. A especificação UI Events (W3C, em andamento) é o lar moderno deste trabalho. Os navegadores acompanharam gradualmente: Chrome 51 (maio de 2016), Firefox 47 (junho de 2016), Safari 10.1 (março de 2017) todos enviaram suporte a event.code. O evento legado keypress está depreciado em favor dos eventos beforeinput e input.

As 5 propriedades, decodificadas

Onde a busca de keycode realmente importa

Erros comuns no tratamento de eventos de teclado

Mais perguntas frequentes

Por que meu handler de tecla não dispara quando o usuário tem teclado não-US?

Quase sempre porque você está verificando event.key para um caractere que só existe com Shift naquele layout. Em um teclado alemão QWERTZ, «/» é Shift+7 (não sua própria tecla); em AZERTY francês, dígitos 0-9 são digitados com Shift+a-linha-acima. Use event.code (tecla física) para atalhos baseados em posição, ou event.key para atalhos baseados em conteúdo (onde você realmente quer o caractere que o usuário acabou de digitar).

Como lido com Cmd+K / Ctrl+K consistentemente entre plataformas?

O idioma padrão: if ((e.metaKey || e.ctrlKey) && e.key.toLowerCase() === "k") { e.preventDefault(); openPalette(); }. No macOS, e.metaKey é a tecla Cmd; no Windows/Linux, e.ctrlKey é o que usuários esperam. Aceite ambos. Sempre preventDefault porque o navegador liga Cmd+K a «focar barra de endereço» em alguns navegadores. Adicione !e.repeat para evitar disparar em manutenção de tecla.

JavaScript pode detectar teclas globais fora da página?

Não, e isso é por design por segurança. O navegador só dispara eventos de teclado para a página ou elemento focado. Extensões de navegador podem escutar com escopo mais amplo usando a API chrome.commands. Apps nativos em Electron, Tauri, etc., podem usar hooks globais a nível de OS. Apps bancários e 2FA dependem dessa isolação: uma aba maliciosa não pode keylogger seu gerenciador de senhas.

Qual a forma certa de detectar «acabou de pressionar» vs «sendo mantido»?

Para toggles, verifique !e.repeat no handler keydown: o primeiro evento tem repeat: false, eventos subsequentes de auto-repetição têm repeat: true. Para ações contínuas (movimento de jogo), rastreie estado de teclas em um Set: adicione em keydown, remova em keyup, depois no seu loop de renderização verifique keysHeld.has("KeyW"). Isso desacopla a entrada do framerate e lida com múltiplas teclas simultâneas (mover + pular).

Algo é enviado para um servidor quando pressiono teclas aqui?

Não. Eventos de tecla são capturados localmente por JavaScript e exibidos nesta página sem nenhuma requisição de rede. Abra a aba Network no DevTools, digite; verá zero tráfego saindo. Seguro para testar em qualquer contexto, incluindo descobrir o que senhas ou atalhos sensíveis produzem no seu teclado.

Ferramentas relacionadas