Der „Tastendruck“ von jQuery funktioniert bei einigen Tasten in Chrome nicht. Wie umgehen?

Lesezeit: 2 Minuten

Benutzer-Avatar
DaveDev

Ich versuche, eine Tastendruckfunktion zu implementieren, die ein Div entfernt, wenn der Benutzer schlägt Esc. Dies funktioniert für Firefox & IE mit folgendem Code:

$("body").keypress(function(e) {
    alert("any key pressed");
    if (e.keyCode == 27) {
        alert("escape pressed");
    }
});

Wenn ich irgendeine Taste drücke, die erste alert wird angezeigt, und wenn ich Escape drücke, das zweite alert wird ebenfalls angezeigt.

Dies funktioniert jedoch nicht mit Chrome. Der Erste alert wird immer angezeigt, wenn ich eine der Buchstabentasten drücke, aber nicht, wenn ich Escape, Tab, Leertaste oder eine der Zahlen drücke.

Warum sollte das sein? Gibt es eine Möglichkeit, Chrome dazu zu bringen, auf diese Tastendrücke zu reagieren?

  • Das ist ein bekannter Fehler von Chrome. Im Mai 2016 gab ein Entwickler an, dass er der Meinung sei, dass sein Verhalten besser zur Spezifikation passt und wird es nicht beheben.

    – Schäfchen

    2. Februar 2017 um 4:50 Uhr


Versuchen Sie es mit der Handhabung keydown stattdessen.

  • Der Trick zu dieser Antwort, den ich für sehr wichtig halte, ist, dass “Versuchen Sie, mit der Handhabung keydown” ist keine Allzwecklösung, sondern spezifisch für “einige Tasten”. Sie müssen noch keypress um die ASCII-Zeichen richtig zu behandeln. Es ist also wirklich ein (wirrer) mehrstufiger Prozess.

    – Kat

    24. Juni 2012 um 18:33 Uhr


  • Weiß jemand warum das so umgesetzt wird?

    – Max Strater

    24. März 2015 um 2:24 Uhr

  • @MaxStrate: keypress ist nur für tatsächliche Charaktere.

    – SLaks

    24. März 2015 um 2:27 Uhr

  • keyup ist etwas besser für die Replikation keypress Funktionalität, da es nicht ausgelöst wird, bis der Benutzer die Taste loslässt.

    – Daniel Tonon

    10. August 2015 um 7:38 Uhr

  • @DanT: Im Gegenteil. Wenn er replizieren will keypressHölle wollen das wiederholte keydowns.

    – SLaks

    10. August 2015 um 14:18 Uhr

verwenden Taste nach unten. Tastendruck funktioniert nicht mit ESC in Chrome (bei anderen Browsern nicht sicher).

$(newTag).keydown(function(e) {  //keypress did not work with ESC;
    if (event.which == '13') {
      ProfilePage.saveNewTag(search_id, $(newTag).val());
    }
    else if (window.event.which){
      $(newTag).remove();
    }
}); 

  • Vielen Dank für die Erwähnung des Chrome-Fehlers. Es wird für diejenigen hilfreich sein, die sich fragen, warum Tastendruck in anderen Browsern tatsächlich für sie funktioniert.

    – Gust

    19. März 2015 um 19:28 Uhr

  • weder keypress Noch keyup funktioniert nicht für die ESC-Taste auf Chromium 69.0.3497.92. auf Linux. keydown funktioniert einwandfrei

    – poya

    23. September 2018 um 16:15 Uhr


Benutzer-Avatar
Dylan Foregger

Für ESC-Taste:

$(document).keydown(function(e) {
  if(e.keyCode == 27) { /* Run code */ }
}

Für Buchstabentasten wie ‘L’:

$(document).keypress(function(e) {
  if(e.which == 108) { }
});

Funktioniert in Chrome und Firefox

Nach der zweiten Benachrichtigung ebenfalls hinzufügen

e.preventDefault();

Dadurch wird verhindert, dass die Standardaktion des Ereignisses ausgelöst wird.

Weitere Informationen zu dieser Methode hier

Ihr Code sollte so aussehen

$("body").keypress(function(e) {
    alert("any key pressed");
    if (e.keyCode == 27) {
         alert("escape pressed");
         e.preventDefault();
}});

Tastendruck ‘ESC’

e.which: 0
e.keyCode: 27

Taste ‘ESC’

e.which: 27
e.keyCode: 27

Für nicht druckbare Zeichen besser verwenden keyup.

Benutzer-Avatar
Hkatschia

Mit der js-Datei Jquery.hotkey können Sie einen Sortcut-Schlüssel erstellen

$(document).bind('keydown', 'esc', function(){ });

1299200cookie-checkDer „Tastendruck“ von jQuery funktioniert bei einigen Tasten in Chrome nicht. Wie umgehen?

This website is using cookies to improve the user-friendliness. You agree by using the website further.

Privacy policy