javascript - event - onkeypress html5
Escucha de JavaScript, "presionar teclas" no detecta el retroceso? (6)
event.key === "Retroceso"
Más reciente y mucho más limpio: use 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
}
});
Estoy usando un oyente de keypress
por ejemplo ...
addEventListener("keypress", function(event){
}
sin embargo, esto no parece detectar un retroceso que borre texto ... ¿hay un oyente diferente que pueda usar para detectar esto?
Algo que escribí en caso de que alguien se topara con un problema cuando las personas golpeaban hacia atrás mientras pensaban que estaban en un campo de forma
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'');
}
});
El evento KeyPress se invoca solo para las teclas de caracteres (imprimibles), el evento KeyDown se genera para todos, incluidos los no imprimibles, como Control , Mayús , Alt , BackSpace , etc.
ACTUALIZAR:
El evento de pulsación de tecla se activa cuando se pulsa una tecla y esa tecla normalmente produce un valor de carácter
El evento de keypress
puede ser diferente en todos los navegadores.
Jsfiddle un Jsfiddle para comparar eventos de teclado (usando los accesos directos de JQuery) en Chrome y Firefox. Dependiendo del navegador que esté utilizando, se activará o no un evento de keypress
. El retroceso activará la keydown/keypress/keyup
en Firefox, pero solo la keydown/keyup
en Chrome.
Eventos de un solo clic de tecla activados
en Chrome
keydown/keypress/keyup
cuando el navegador registra una entrada de teclado (sekeypress
)keydown/keyup
si no hay entrada de teclado (probado con alt, shift, retroceso, teclas de flecha)keydown
solo para la pestaña?
en Firefox
keydown/keypress/keyup
cuando el navegador registra una entrada del teclado, pero también para el retroceso, las teclas de flecha, la pestaña (por lo que aquí se dispara lakeypress
incluso sin entrada)keydown/keyup
para alt, shift
Esto no debería sorprender porque de acuerdo con https://api.jquery.com/keypress/ :
Nota: como el evento de pulsación de tecla no está cubierto por ninguna especificación oficial, el comportamiento real que se encuentra al usarlo puede diferir según el navegador, la versión del navegador y la plataforma.
El uso del tipo de evento de pulsación de tecla está obsoleto 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 desaprueba el uso de este tipo de evento. En contextos de edición, los autores pueden suscribirse al evento beforeinput en su lugar.
Finalmente, para responder a su pregunta, debe usar la función de keyup
o de keydown
para 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>
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 la tecla BackSpace es 8
Pruebe el keydown
de la keypress
lugar de keydown
keypress
.
Los eventos del teclado ocurren en este orden: keydown
, keyup
, keypress
El problema con el retroceso probablemente sea que el navegador navegará de nuevo en la keyup
y, por lo tanto, su página no verá el evento de keypress
.