Tengo dos funciones Cuando se presiona enter, las funciones se ejecutan correctamente, pero cuando se presiona escape, no lo hace. ¿Cuál es el número correcto para la tecla 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
fuente
fuente
document.addEventListener("keydown", e => console.log(e.keyCode))
en la consola de su navegador, haga clic en la ventana y presione la tecla que está buscando.Respuestas:
Pruebe con el evento keyup :
fuente
keydown
imitará el comportamiento nativo, al menos en Windows, donde presionar ESC o Retorno en un cuadro de diálogo activará la acción antes de que se suelte la tecla.En lugar de codificar los valores del código clave en su función, considere usar constantes con nombre para transmitir mejor su significado:
Algunos navegadores (como FireFox, inseguro de otros) definen un
KeyEvent
objeto global que expone este tipo de constantes para usted. Esta pregunta SO también muestra una buena manera de definir ese objeto en otros navegadores.fuente
0x1B
y Enter es0x0D
, ¿verdad?(Respuesta extraída de mi comentario anterior )
Necesita usar en
keyup
lugar dekeypress
. p.ej:keypress
no parece ser manejado de manera consistente entre los navegadores (pruebe la demostración en http://api.jquery.com/keypress en IE vs Chrome vs Firefox. A veceskeypress
no se registra, y los valores para 'cual' y ' keyCode 'varíe) mientras quekeyup
es consistente.Dado que hubo una discusión sobre
e.which
vse.keyCode
: Tenga en cuenta quee.which
es el valor jquery-normalizado y es el recomendado para su uso:(de http://api.jquery.com/event.which/ )
fuente
keypress
al escapar lo están haciendo bien.keypress
está destinado a disparar solo cuando la tecla produce un carácter mientras quekeyup
dispara siempre. developer.mozilla.org/en-US/docs/Web/Events/keypressPara encontrar el código clave de cualquier tecla, use esta función simple:
fuente
27
es el código para la clave de escape. :)fuente
Tu mejor apuesta es
Resumen
which
es más preferible quekeyCode
porque está normalizadokeyup
es más preferible quekeydown
porque se puede presionar la tecla varias veces si el usuario la mantiene presionada.keypress
menos que quiera capturar personajes reales.¡Curiosamente Bootstrap usa keydown y keyCode en su componente desplegable (a partir de 3.0.2)! Creo que probablemente sea una mala elección allí.
Fragmento relacionado del documento de JQuery
Otro elemento de interés: JavaScript Keypress Library
fuente
Pruebe el complemento jEscape ( descargue de Google Drive )
u obtener el código clave para el navegador cruzado
tal vez puedas usar el interruptor
fuente
Tu código funciona bien. Es muy probable que la ventana no esté enfocada. Uso una función similar para cerrar cuadros de iframe, etc.
fuente
Estaba tratando de hacer lo mismo y me estaba molestando. En firefox, parece que si intenta hacer algunas cosas cuando se presiona la tecla de escape, continúa procesando la tecla de escape que luego cancela lo que estaba tratando de hacer. La alerta funciona bien. Pero en mi caso, quería volver a la historia que no funcionó. Finalmente descubrí que tenía que forzar la propagación del evento para detener como se muestra a continuación ...
fuente
Para explicar donde otras respuestas no lo han hecho; el problema es tu uso de
keypress
.Tal vez el evento está mal nombrado pero
keypress
se define para disparar cuando . Es decir, texto. Mientras que lo que quieres es / , que se activa siempre (antes o después, respectivamente) . Es decir, esas cosas en el teclado.when an actual
character
is being inserted
keydown
keyup
the user depresses a
key
La diferencia aparece aquí porque
esc
es un carácter de control (literalmente 'carácter no imprimible') y, por lo tanto, no escribe ningún texto, por lo que ni siquiera se disparakeypress
.enter
es extraño, porque aunque lo esté utilizando como un carácter de control (es decir, para controlar la interfaz de usuario), todavía está insertando un carácter de nueva línea, que se activarákeypress
.Fuente: quirksmode
fuente
Para obtener el código hexadecimal para todos los caracteres: http://asciitable.com/
fuente
Simplemente publicando una respuesta actualizada que
e.keyCode
se considera DEPRECADA en MDN .En su lugar, debe optar por el
e.key
que admite nombres limpios para todo. Aquí está la copia relevante de pastafuente
Esc
lugar del estándarEscape
.Una robusta biblioteca Javascript para capturar la entrada del teclado y las combinaciones de teclas ingresadas. No tiene dependencias.
http://jaywcjlove.github.io/hotkeys/
teclas de acceso rápido comprende los siguientes modificadores: ⇧, shiftoption⌥altctrlcontrolcommand, y ⌘.
Las siguientes teclas especiales se pueden utilizar para los accesos directos: backspacetab, clear, enter, return, esc, escape, space, up, down, left, right, home, end, pageup, pagedown, del, deletey f1a través f19.
fuente
Siempre he usado keyup y e.which para capturar la tecla de escape.
fuente
Sé que esta pregunta es sobre jquery, pero para aquellas personas que usan jqueryui, hay constantes para muchos de los códigos clave:
http://api.jqueryui.com/jQuery.ui.keyCode/
fuente