Respuestas:
Evento KeyPress se invoca sólo por el carácter teclas (imprimibles), evento KeyDown se levanta para todos incluyendo no imprimible tales como Control, Shift, Alt, BackSpace, etc.
ACTUALIZAR:
El evento de pulsación de tecla se activa cuando se presiona una tecla y esa tecla normalmente produce un valor de carácter
Intenta en keydown
lugar de keypress
.
Los eventos de teclado se producen en este orden: keydown
, keyup
,keypress
El problema con el retroceso probablemente es que el navegador volverá a navegar keyup
y, por lo tanto, su página no verá el keypress
evento.
keydown
keypress
keyup
. unixpapa.com/js/testkey.html
keyup
que se desencadena el evento.
keydown
evento, pero el carácter no se elimina de la entrada hasta algún momento después de eso.
El keypress
evento puede ser diferente en todos los navegadores.
Creé un Jsfiddle para comparar eventos de teclado (usando los atajos de JQuery) en Chrome y Firefox. Dependiendo del navegador que esté utilizando, un keypress
evento se activará o no; la retroceso se activará keydown/keypress/keyup
en Firefox pero solo keydown/keyup
en Chrome.
en Chrome
keydown/keypress/keyup
cuando el navegador registra una entrada de teclado ( keypress
se activa)
keydown/keyup
si no hay entrada de teclado (probado con alt, shift, retroceso, teclas de flecha)
keydown
solo para tab?
en Firefox
keydown/keypress/keyup
cuando el navegador registra una entrada de teclado pero también para retroceso, teclas de flecha, pestaña (por lo que aquí keypress
se dispara incluso sin entrada)
keydown/keyup
para alt, shift
Esto no debería ser sorprendente porque de acuerdo con https://api.jquery.com/keypress/ :
Nota: dado que el evento de pulsación de tecla no está cubierto por ninguna especificación oficial, el comportamiento real encontrado al usarlo puede diferir entre navegadores, versiones de navegador y plataformas.
El uso del tipo de evento de pulsación de tecla está en desuso por W3C ( http://www.w3.org/TR/DOM-Level-3-Events/#event-type-keypress )
El tipo de evento de pulsación de tecla se define en esta especificación para referencia e integridad, pero esta especificación desprecia el uso de este tipo de evento. Cuando están en contextos de edición, los autores pueden suscribirse al evento beforeinput en su lugar.
Finalmente, para responder a su pregunta, debe usar keyup
o keydown
detectar un retroceso en Firefox y Chrome.
Pruébalo aquí:
$(".inputTxt").bind("keypress keyup keydown", function (event) {
var evtType = event.type;
var eWhich = event.which;
var echarCode = event.charCode;
var ekeyCode = event.keyCode;
switch (evtType) {
case 'keypress':
$("#log").html($("#log").html() + "<b>" + evtType + "</b>" + " keycode: " + ekeyCode + " charcode: " + echarCode + " which: " + eWhich + "<br>");
break;
case 'keyup':
$("#log").html($("#log").html() + "<b>" + evtType + "</b>" + " keycode: " + ekeyCode + " charcode: " + echarCode + " which: " + eWhich + "<p>");
break;
case 'keydown':
$("#log").html($("#log").html() + "<b>" + evtType + "</b>" + " keycode: " + ekeyCode + " charcode: " + echarCode + " which: " + eWhich + "<br>");
break;
default:
break;
}
});
<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.9.1/jquery.min.js"></script>
<input class="inputTxt" type="text" />
<div id="log"></div>
Algo que escribí en caso de que alguien encuentre un problema con las personas presionando la tecla de retroceso mientras piensan que están en un campo de formulario
window.addEventListener("keydown", function(e){
/*
* keyCode: 8
* keyIdentifier: "U+0008"
*/
if(e.keyCode === 8 && document.activeElement !== 'text') {
e.preventDefault();
alert('Prevent page from going back');
}
});
Mi control numérico:
function CheckNumeric(event) {
var _key = (window.Event) ? event.which : event.keyCode;
if (_key > 95 && _key < 106) {
return true;
}
else if (_key > 47 && _key < 58) {
return true;
}
else {
return false;
}
}
<input type="text" onkeydown="return CheckNumerick(event);" />
intentalo
El código de tecla de retroceso es 8
Más reciente y mucho más limpio: uso event.key
. ¡No más códigos de números arbitrarios!
note.addEventListener('keydown', function(event) {
const key = event.key; // const {key} = event; ES6+
if (key === "Backspace") {
// Do something
}
});
.key
Actualmente es la opción recomendada por los documentos. Además, admite varios teclados internacionales con diferentes asignaciones para cualquier tecla dada. No son arbitrarios en el sentido de que son fijos, pero lo son al leer el código
Utilice uno de los eventos keyup / keydown / beforeinput en su lugar.
según esta referencia, la pulsación de tecla está en desuso y ya no se recomienda.
El evento de pulsación de tecla se activa cuando se presiona una tecla que produce un valor de carácter. Ejemplos de teclas que producen un valor de caracteres son las teclas alfabéticas, numéricas y de puntuación. Ejemplos de teclas que no producen un valor de caracteres son las teclas modificadoras como Alt, Shift, Ctrl o Meta.
si usa "beforeinput", tenga cuidado con la compatibilidad del navegador . la diferencia entre "beforeinput" y los otros dos es que "beforeinput" se dispara cuando el valor de entrada está a punto de cambiar, por lo que con los caracteres que no pueden cambiar el valor de entrada, no se dispara (por ejemplo, shift, ctr, alt).
Tuve el mismo problema y al usar keyup se resolvió.
keypress
eventos en muchos navegadores. Ver unixpapa.com/js/key.html