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 keydown
invece di keypress
.
Gli eventi della tastiera si verificano in questo ordine: keydown
, keyup
,keypress
Il problema con backspace è probabilmente che il browser tornerà indietro keyup
e quindi la tua pagina non vedrà l' keypress
evento.
keydown
keypress
keyup
. unixpapa.com/js/testkey.html
keyup
evento non viene generato.
keydown
evento ma il personaggio non viene rimosso dall'input fino a dopo.
L' keypress
evento 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/keyup
su Firefox ma solo keydown/keyup
su Chrome.
su Chrome
keydown/keypress/keyup
quando il browser registra un input da tastiera ( keypress
viene attivato)
keydown/keyup
se nessun input da tastiera (testato con alt, shift, backspace, tasti freccia)
keydown
solo per scheda?
su Firefox
keydown/keypress/keyup
quando il browser registra un input da tastiera ma anche per backspace, tasti freccia, tab (quindi qui keypress
viene 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 keyup
o keydown
rilevare 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.
keypress
eventi in molti browser. Vedi unixpapa.com/js/key.html