Risposte:
Evento Pressione viene richiamato solo carattere chiavi (stampabili), KeyDown è sollevato per tutti, anche non stampabile come Control, Shift, Alt, BackSpace, etc.
AGGIORNARE:
L'evento keypress viene generato quando viene premuto un tasto e quel tasto normalmente produce un valore di carattere
Prova keydowninvece di keypress.
Gli eventi della tastiera si verificano in questo ordine: keydown, keyup,keypress
Il problema con backspace è probabilmente che il browser tornerà indietro keyupe quindi la tua pagina non vedrà l' keypressevento.
keydown keypress keyup. unixpapa.com/js/testkey.html
keyupevento non viene generato.
keydownevento ma il personaggio non viene rimosso dall'input fino a dopo.
L' keypressevento potrebbe essere diverso nei browser.
Ho creato un Jsfiddle per confrontare gli eventi della tastiera (usando le scorciatoie JQuery) su Chrome e Firefox. A seconda del browser in uso keypress, verrà attivato o meno un evento: il backspace verrà attivato keydown/keypress/keyupsu Firefox ma solo keydown/keyupsu Chrome.
su Chrome
keydown/keypress/keyupquando il browser registra un input da tastiera ( keypressviene attivato)
keydown/keyup se nessun input da tastiera (testato con alt, shift, backspace, tasti freccia)
keydown solo per scheda?
su Firefox
keydown/keypress/keyupquando il browser registra un input da tastiera ma anche per backspace, tasti freccia, tab (quindi qui keypressviene attivato anche senza input)
keydown/keyup per alt, maiusc
Questo non dovrebbe sorprendere perché secondo https://api.jquery.com/keypress/ :
Nota: poiché l'evento keypress non è coperto da alcuna specifica ufficiale, il comportamento effettivo riscontrato durante l'utilizzo potrebbe differire tra browser, versioni del browser e piattaforme.
L'uso del tipo di evento keypress è deprecato da W3C ( http://www.w3.org/TR/DOM-Level-3-Events/#event-type-keypress )
Il tipo di evento keypress è definito in questa specifica per riferimento e completezza, ma questa specifica deprezza l'utilizzo di questo tipo di evento. Durante la modifica dei contesti, gli autori possono invece iscriversi all'evento beforeinput.
Infine, per rispondere alla tua domanda, è necessario utilizzare keyupo keydownrilevare un backspace su Firefox e Chrome.
Provalo qui:
$(".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>
Qualcosa che ho scritto in caso qualcuno si imbatta in un problema con le persone che colpiscono il backspace mentre pensano di essere in un campo del modulo
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');
}
});
Il mio controllo numerico:
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);" />
Provalo
Il codice chiave BackSpace è 8
Più recente e molto più pulito: usare event.key. Niente più codici numerici arbitrari!
note.addEventListener('keydown', function(event) {
const key = event.key; // const {key} = event; ES6+
if (key === "Backspace") {
// Do something
}
});
.keyè attualmente l'opzione consigliata dai documenti. Inoltre, supporta varie tastiere internazionali con mappature diverse per ogni dato tasto. Non sono arbitrari nel senso che sono
Utilizzare invece uno degli eventi keyup / keydown / beforeinput.
sulla base di questo riferimento, la pressione dei tasti è obsoleta e non è più consigliata.
L'evento keypress viene generato quando viene premuto un tasto che produce un valore di carattere. Esempi di chiavi che producono un valore di carattere sono i tasti alfabetici, numerici e di punteggiatura. Esempi di chiavi che non producono un valore di carattere sono i tasti modificatori come Alt, Maiusc, Ctrl o Meta.
se usi "beforeinput" fai attenzione alla compatibilità con il tuo browser . la differenza tra "beforeinput" e gli altri due è che "beforeinput" viene attivato quando il valore di input sta per essere modificato, quindi con caratteri che non possono modificare il valore di input, non viene attivato (ad esempio shift, ctr, alt).
Ho avuto lo stesso problema e usando il keyup è stato risolto.
keypresseventi in molti browser. Vedi unixpapa.com/js/key.html