Antworten:
KeyPress - Ereignis aufgerufen wird , nur für die Zeichen (druckbare) Tasten wird KeyDown Ereignis ausgelöst hat für alle einschließlich druckbaren wie Control, Shift, Alt, BackSpace, usw.
AKTUALISIEREN:
Das Tastendruckereignis wird ausgelöst, wenn eine Taste gedrückt wird und diese Taste normalerweise einen Zeichenwert erzeugt
Referenz .
Versuchen Sie keydown
statt keypress
.
Die Tastatur - Ereignisse treten in dieser Reihenfolge: keydown
, keyup
,keypress
Das Problem mit der Rücktaste ist wahrscheinlich, dass der Browser zurück navigiert keyup
und Ihre Seite das keypress
Ereignis daher nicht sieht .
keydown
keypress
keyup
. unixpapa.com/js/testkey.html
keyup
angezeigt wird, wenn das Ereignis ausgelöst wird.
keydown
Ereignis aus, aber das Zeichen wird erst einige Zeit später aus der Eingabe entfernt.
Das keypress
Ereignis kann in den verschiedenen Browsern unterschiedlich sein.
Ich habe eine Jsfiddle erstellt , um Tastaturereignisse (mithilfe der JQuery-Verknüpfungen) in Chrome und Firefox zu vergleichen. Je nachdem, welchen Browser Sie verwenden, wird ein keypress
Ereignis ausgelöst oder nicht - die Rücktaste wird keydown/keypress/keyup
in Firefox ausgelöst, jedoch nur keydown/keyup
in Chrome.
auf Chrome
keydown/keypress/keyup
wenn der Browser eine Tastatureingabe registriert ( keypress
wird ausgelöst)
keydown/keyup
wenn keine Tastatureingabe (getestet mit Alt, Shift, Backspace, Pfeiltasten)
keydown
nur für tab?
auf Firefox
keydown/keypress/keyup
Wenn der Browser eine Tastatureingabe registriert, aber auch für Rücktaste, Pfeiltasten, Tabulator (hier keypress
wird also auch ohne Eingabe ausgelöst)
keydown/keyup
für alt, verschieben
Dies sollte nicht überraschen, denn laut https://api.jquery.com/keypress/ :
Hinweis: Da das Tastendruckereignis nicht durch eine offizielle Spezifikation abgedeckt ist, kann sich das tatsächliche Verhalten bei seiner Verwendung je nach Browser, Browserversion und Plattform unterscheiden.
Die Verwendung des Tastendruck-Ereignistyps wird von W3C nicht mehr empfohlen ( http://www.w3.org/TR/DOM-Level-3-Events/#event-type-keypress ).
Der Tastendruck-Ereignistyp ist in dieser Spezifikation zur Bezugnahme und Vollständigkeit definiert, diese Spezifikation veraltet jedoch die Verwendung dieses Ereignistyps. In Bearbeitungskontexten können Autoren stattdessen das Ereignis vor der Eingabe abonnieren.
Um Ihre Frage zu beantworten, sollten Sie einen Rückraum in Firefox und Chrome verwenden keyup
oder keydown
erkennen.
Probieren Sie es hier aus:
$(".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>
Etwas, das ich geschrieben habe, falls jemand auf ein Problem stößt, bei dem Leute die Rücktaste drücken, während sie denken, dass sie sich in einem Formularfeld befinden
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');
}
});
Meine numerische Kontrolle:
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);" />
Versuch es
Der BackSpace-Schlüsselcode lautet 8
Neuere und viel sauberere: verwenden event.key
. Keine willkürlichen Nummerncodes mehr!
note.addEventListener('keydown', function(event) {
const key = event.key; // const {key} = event; ES6+
if (key === "Backspace") {
// Do something
}
});
.key
ist derzeit die von den Dokumenten empfohlene Option. Darüber hinaus werden verschiedene internationale Tastaturen mit unterschiedlichen Zuordnungen für eine bestimmte Taste unterstützt. Sie sind nicht willkürlich in dem Sinne, dass sie festgelegt sind, aber sie sind beim Lesen von Code
Verwenden Sie stattdessen eines der Ereignisse keyup / keydown / beforeinput.
basierend auf dieser Referenz ist, keypress veraltet und wird nicht mehr empfohlen.
Das Tastendruckereignis wird ausgelöst, wenn eine Taste gedrückt wird, die einen Zeichenwert erzeugt. Beispiele für Tasten, die einen Zeichenwert erzeugen, sind alphabetische, numerische und Interpunktionsschlüssel. Beispiele für Tasten, die keinen Zeichenwert erzeugen, sind Modifizierertasten wie Alt, Umschalt, Strg oder Meta.
wenn Sie „beforeinput“ vorsichtig sein , es der Browser - Kompatibilität . Der Unterschied zwischen "vor Eingabe" und den beiden anderen besteht darin, dass "vor Eingabe" ausgelöst wird, wenn sich der Eingabewert ändert. Bei Zeichen, die den Eingabewert nicht ändern können, wird er also nicht ausgelöst (z. B. Shift, Strg, Alt).
Ich hatte das gleiche Problem und mit Keyup wurde es gelöst.
keypress
Ereignisse in vielen Browsern aus. Siehe unixpapa.com/js/key.html