Es wird nicht angezeigt, dass die jQuery-Methoden keyup, keydown oder keypress ausgelöst werden, wenn die Rücktaste gedrückt wird. Wie würde ich das Drücken der Rücktaste abfangen?
Wie kann man die Rücktaste mit jQuery abfangen? [duplicate]
Probier diese :
$('html').keyup(function(e){if(e.keyCode == 8)alert('backspace trapped')})
-
auch auf 46 prüfen (löschen)
– Andres SK
13. Dezember ’11 um 16:32
-
Es funktioniert, aber Sie können auf diese Weise das modale Fenster nicht anzeigen und aufhören, zur vorherigen Seite zurückzukehren.
– Marek Bar
31. Juli ’13 um 10:16
-
Versuchen Sie e.preventDefault() und machen Sie DANN das zweifelhafte Ding 🙂
– jave.web
14. August ’13 um 9:37
-
Vollständiges Codebeispiel, das verhindert, dass zur vorherigen Seite gewechselt wird, sowie die folgenden jQuery-KeyCode-Konstanten verwendet werden.
– Rick Smith
4. Sept. ’15 um 16:00
Autobahn des Lebens
Reguläres Javascript kann verwendet werden, um die Rücktaste abzufangen. Sie können die Methode event.keyCode verwenden. Der Schlüsselcode ist 8, also würde der Code ungefähr so aussehen:
if (event.keyCode == 8) {
// Do stuff...
}
Wenn Sie nach beiden suchen möchten [delete] (46) sowie die [backspace] (8) Tasten, verwenden Sie Folgendes:
if (event.keyCode == 8 || event.keyCode == 46) {
// Do stuff...
}
Arbeiten an der gleichen Idee wie oben, aber etwas verallgemeinernd. Da die Rücktaste bei den Eingabeelementen gut funktionieren sollte, sollte sie jedoch nicht funktionieren, wenn der Fokus ein Absatz oder so ist, da dort die Seite dazu neigt, zur vorherigen Seite im Verlauf zurückzukehren.
$('html').on('keydown' , function(event) {
if(! $(event.target).is('input')) {
console.log(event.which);
//event.preventDefault();
if(event.which == 8) {
// alert('backspace pressed');
return false;
}
}
});
Rückgabe von false => Sowohl event.preventDefault als auch event.stopPropagation sind wirksam.
-
Upvote für Keydown statt Keyup.
– Matas Vaitkevicius
18. August ’15 um 10:50
Rick Smith
Das Standardverhalten für die Rücktaste in den meisten Browsern besteht darin, zur vorherigen Seite zurückzukehren. Wenn Sie tun nicht Wenn Sie dieses Verhalten wünschen, müssen Sie den Anruf sicherstellen preventDefault()
. Aber wie das OP andeutet, wenn Sie es immer anrufen preventDefault()
Sie machen es auch unmöglich, Dinge in Textfeldern zu löschen. Der folgende Code hat eine Lösung, die von dieser Antwort angepasst wurde.
Anstatt hartcodierte keyCode-Werte zu verwenden (einige Werte ändern sich je nach Browser, obwohl ich das für Backspace oder Delete nicht gefunden habe), jQuery hat keyCode-Konstanten bereits definiert. Dies macht Ihren Code lesbarer und kümmert sich für Sie um alle keyCode-Inkonsistenzen.
// Bind keydown event to this function. Replace document with jQuery selector
// to only bind to that element.
$(document).keydown(function(e){
// Use jquery's constants rather than an unintuitive magic number.
// $.ui.keyCode.DELETE is also available. <- See how constants are better than '46'?
if (e.keyCode == $.ui.keyCode.BACKSPACE) {
// Filters out events coming from any of the following tags so Backspace
// will work when typing text, but not take the page back otherwise.
var rx = /INPUT|SELECT|TEXTAREA/i;
if(!rx.test(e.target.tagName) || e.target.disabled || e.target.readOnly ){
e.preventDefault();
}
// Add your code here.
}
});
.
Nur zur Verdeutlichung möchte ich beim Drücken der Rücktaste einfangen und eine Aktion ausführen. Ich ändere den aktivierten Status einiger Schaltflächen auf der Seite, wenn das letzte Zeichen aus einem Textfeld entfernt wird. Daher möchte ich immer noch, dass die Rücktaste ihren normalen Betrieb ausführt.
– ChrisP
8. Februar ’11 um 17:17
Das ist nicht wahr. Es erscheint in Keyup- und Keydown-Methoden. Erscheint nur nicht bei Tastendruck.
– Linie
28. November ’14 um 12:50
@ RickSmith Ich stimme nicht zu. Die Frage, auf die Sie sich beziehen, war in JavaScript, während das OP hier in jQuery stellt. Es kann einen Grund geben, warum jemand die Antwort auf die eine oder andere Weise haben möchte.
– Racil Hilan
4. September ’15 um 21:29
@RacilHilan Sie haben Recht, dies sollte kein Duplikat sein.
– Rick Smith
8. September ’15 um 16:26