Eu tenho duas funções. Quando enter é pressionado, as funções são executadas corretamente, mas quando escape é pressionado, não. Qual é o número correto para a chave de escape?
$(document).keypress(function(e) {
if (e.which == 13) $('.save').click(); // enter (works as expected)
if (e.which == 27) $('.cancel').click(); // esc (does not work)
});
javascript
jquery
Shishant
fonte
fonte
document.addEventListener("keydown", e => console.log(e.keyCode))
no console do navegador, clicar na janela e pressionar a tecla que você está procurando.Respostas:
Tente com o evento keyup :
fonte
keydown
imitará o comportamento nativo - pelo menos no Windows, onde pressionar ESC ou Return em uma caixa de diálogo acionará a ação antes que a tecla seja liberada.Em vez de codificar os valores do código-chave em sua função, considere usar constantes nomeadas para transmitir melhor o seu significado:
Alguns navegadores (como o FireFox, inseguros de outros) definem um
KeyEvent
objeto global que expõe esses tipos de constantes para você. Essa pergunta do SO mostra uma boa maneira de definir esse objeto em outros navegadores também.fonte
0x1B
e Enter é0x0D
, certo?(Resposta extraída do meu comentário anterior )
Você precisa usar em
keyup
vez dekeypress
. por exemplo:keypress
parece não ser tratado de maneira consistente entre navegadores (experimente a demonstração em http://api.jquery.com/keypress no IE x Chrome x Firefox. Às vezes,keypress
não é registrado e os valores para 'what' e ' keyCode 'variam) enquantokeyup
é consistente.Como houve uma discussão sobre
e.which
vse.keyCode
: observe que essee.which
é o valor normalizado por jquery e é o recomendado para uso:(em http://api.jquery.com/event.which/ )
fonte
keypress
na fuga estão fazendo o certo.keypress
destina-se a disparar apenas quando a chave produz um caractere, enquantokeyup
dispara sempre. developer.mozilla.org/pt-BR/docs/Web/Events/keypressPara encontrar o código de tecla para qualquer tecla, use esta função simples:
fonte
27
é o código para a chave de escape. :)fonte
Sua melhor aposta é
Sumário
which
é mais preferível do quekeyCode
porque é normalizadokeyup
é mais preferível do quekeydown
porque o pressionamento de tecla pode ocorrer várias vezes se o usuário mantiver pressionado.keypress
menos que queira capturar caracteres reais.Curiosamente, o Bootstrap usa keydown e keyCode em seu componente suspenso (a partir do 3.0.2)! Eu acho que provavelmente é uma má escolha lá.
Snippet relacionado do JQuery doc
Outro item de interesse: JavaScript Keypress Library
fonte
Experimente o plugin jEscape (faça o download no Google Drive )
ou obtenha um código de chave para vários navegadores
talvez você possa usar o switch
fonte
Seu código funciona muito bem. Provavelmente a janela não está focada. Uso uma função semelhante para fechar caixas iframe etc.
fonte
Eu estava tentando fazer a mesma coisa e isso estava me incomodando. No firefox, parece que se você tentar fazer algumas coisas quando a tecla Escape for pressionada, ela continuará processando a tecla Escape, que cancelará o que você estava tentando fazer. Alerta funciona bem. Mas no meu caso, eu queria voltar na história que não funcionou. Finalmente descobri que eu tinha que forçar a propagação do evento a parar, como mostrado abaixo ...
fonte
Explicar onde outras respostas não foram; o problema é o seu uso
keypress
.Talvez o evento tenha apenas um nome errado, mas
keypress
esteja definido para disparar quando . Ou seja, texto. Enquanto o que você quer é / , que é acionado sempre (antes ou depois, respectivamente)when an actual
character
is being inserted
keydown
keyup
the user depresses a
key
. Ou seja, essas coisas no teclado.A diferença aparece aqui porque
esc
é um caractere de controle (literalmente ' caractere não imprimível') e, portanto, não escreve nenhum texto, portanto, nem é acionadokeypress
.enter
é estranho, porque mesmo que você o esteja usando como um caractere de controle (ou seja, para controlar a interface do usuário), ele ainda está inserindo um caractere de nova linha, que será acionadokeypress
.Fonte: quirksmode
fonte
Para obter o código hexadecimal para todos os caracteres: http://asciitable.com/
fonte
Apenas postando uma resposta atualizada que
e.keyCode
é considerada DEPRECATED no MDN .Em vez disso, você deve optar pelo
e.key
que suporta nomes limpos para tudo. Aqui está a pasta de cópia relevantefonte
Esc
em vez do padrãoEscape
.Uma robusta biblioteca Javascript para capturar entradas de teclado e combinações de teclas inseridas. Não possui dependências.
http://jaywcjlove.github.io/hotkeys/
teclas compreende os seguintes modificadores de: ⇧, shiftoption⌥altctrlcontrolcommand, e ⌘.
As seguintes teclas especiais podem ser usados para atalhos: backspacetab, clear, enter, return, esc, escape, space, up, down, left, right, home, end, pageup, pagedown, del, deletee f1através f19.
fonte
Eu sempre usei keyup e e.chich para pegar a chave de escape.
fonte
Eu sei que esta pergunta está perguntando sobre jquery, mas para as pessoas que usam jqueryui, há constantes para muitos dos códigos de chave:
http://api.jqueryui.com/jQuery.ui.keyCode/
fonte