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
keydownimitará 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
KeyEventobjeto 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
0x1By Enter es0x0D, ¿verdad?(Respuesta extraída de mi comentario anterior )
Necesita usar en
keyuplugar dekeypress. p.ej:keypressno 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 veceskeypressno se registra, y los valores para 'cual' y ' keyCode 'varíe) mientras quekeyupes consistente.Dado que hubo una discusión sobre
e.whichvse.keyCode: Tenga en cuenta quee.whiches el valor jquery-normalizado y es el recomendado para su uso:(de http://api.jquery.com/event.which/ )
fuente
keypressal escapar lo están haciendo bien.keypressestá destinado a disparar solo cuando la tecla produce un carácter mientras quekeyupdispara siempre. developer.mozilla.org/en-US/docs/Web/Events/keypressPara encontrar el código clave de cualquier tecla, use esta función simple:
fuente
27es el código para la clave de escape. :)fuente
Tu mejor apuesta es
Resumen
whiches más preferible quekeyCodeporque está normalizadokeyupes más preferible quekeydownporque se puede presionar la tecla varias veces si el usuario la mantiene presionada.keypressmenos 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
keypressse 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 actualcharacteris being insertedkeydownkeyupthe user depresses akeyLa diferencia aparece aquí porque
esces 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.enteres 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.keyCodese considera DEPRECADA en MDN .En su lugar, debe optar por el
e.keyque admite nombres limpios para todo. Aquí está la copia relevante de pastafuente
Esclugar 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