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/keyupcuando el navegador registra una entrada de teclado (sekeypress)keydown/keyupsi no hay entrada de teclado (probado con alt, shift, retroceso, teclas de flecha)keydownsolo para la pestaña?
en Firefox
keydown/keypress/keyupcuando 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 lakeypressincluso sin entrada)keydown/keyuppara 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 .