Strg + Geben Sie jQuery in TEXTAREA ein


90

Wie löse ich etwas aus, wenn sich der Cursor in TEXTAREA befindet und Ctrl+ Entergedrückt wird? Verwenden von jQuery . Vielen Dank


Die Antwort, die Sie akzeptiert haben, funktioniert nicht. Bitte ändern Sie Ihre akzeptierte Antwort
Peterchaula

Antworten:


127

Sie können das event.ctrlKeyFlag verwenden, um zu sehen, ob die CtrlTaste gedrückt wird.

$('#textareaId').keydown(function (e) {

  if (e.ctrlKey && e.keyCode == 13) {
    // Ctrl-Enter pressed
  }
});

Überprüfen Sie das obige Snippet hier .


15
Dies funktioniert in Google Chrome nicht. Wenn Strg + Eingabetaste gedrückt wird 10, lautet der Tastencode nicht 13.
Znarkus

39
Das funktioniert nicht. Die unten stehende Lösung von Yarolslav Yakovlev funktioniert ordnungsgemäß. Bitte ändern Sie die akzeptierte Antwort, um Zeit zu sparen.
Phil Ricketts

1
@Replete Welche Umgebung haben Sie getestet? Gibt es eine Dokumentation zu keyCode 10?
Sanghyun Lee

keyCode 10 sollte auf Chrome nicht mehr vorkommen, siehe bugs.chromium.org/p/chromium/issues/detail?id=79407
swissspidy

Wenn Trigger- keypressEreignis, wird der Schlüsselcode 10 sein, aber keydownoder keyupwird 13 melden. Nur Chrom testen
iulo

137

Eigentlich macht dieser den Trick und funktioniert in allen Browsern:

if ((event.keyCode == 10 || event.keyCode == 13) && event.ctrlKey)

Link zu js Geige .

Anmerkungen:

  • In Chrome unter Windows und Linux enterwürde als keyCode10 registriert , nicht als 13 ( Fehlerbericht ). Also müssen wir nach beidem suchen.
  • ctrlKeyist controlunter Windows, Linux und MacOS (nicht command). Siehe auch metaKey.

Die Geige funktioniert in Firefox 27 nicht. Was ist los?
CodeManX

4
@ Jaroslaw: Kannst du bitte sagen, was die Verwendung von "event.keyCode == 10" in deiner Antwort ist?
Shashank.gupta40

3
Wenn sich noch jemand über keyCode 10 und andere Chrome-Inhalte wundert, lesen Sie dies .
user2422869

1
@YaroslavYakovlev ctrlKeyentspricht der Befehlstaste auf Macs?
Jacob Stamm

2
Um auch Mac zu unterstützen:if ((e.keyCode == 10 || e.keyCode == 13) && (e.ctrlKey || e.metaKey))
Ilya Manyahin

78

Universelle Lösung

Dies unterstützt auch macOS: Sowohl Ctrl+ Enterals auch ⌘ Command+ Enterwerden akzeptiert.

if ((e.ctrlKey || e.metaKey) && (e.keyCode == 13 || e.keyCode == 10)) {
    // do something
}

15
Ignorieren Sie diese Antwort nicht, da sie eine niedrigere Punktzahl hat. Es ist nur eine neuere Antwort. Es ist tatsächlich besser.
David Bell

1
Erklärung des ersten Teils: e.ctrlKeyErkennt ⌃ Controlund e.metaKeyerkennt unter macOS ⌘ Command. Verwenden Sie diese Option, wenn sowohl Strg-Eingabe als auch Befehl-Eingabe das Verhalten auslösen sollen.
Rory O'Kane

Können Sie erklären, warum Sie ein e.keyCodevon akzeptieren 10, um zusätzlich zu Enter zu bedeuten 13? In der MDN- keyCodeDokumentation wird nur 13ein möglicher Wert für Enter aufgeführt, der in mehreren Browsern und Betriebssystemen getestet wurde.
Rory O'Kane

1
@ RoryO'Kane Einige Versionen von Chrome unter Windows und Linux verwenden anscheinend den Wert 10.
Flimm

4

Ich fand Antworten von anderen entweder unvollständig oder nicht browserübergreifend kompatibel.

Dieser Code funktioniert mit Google Chrome.

$(function ()
{
    $(document).on("keydown", "#textareaId", function(e)
    {
        if ((e.keyCode == 10 || e.keyCode == 13) && e.ctrlKey)
        {
            alert('ctrl+enter');
        }
    });
});

2
Könnten Sie Ihre Antwort verbessern, indem Sie weitere Erklärungen hinzufügen? Danke :) Andernfalls wäre dies nur eine Antwort von geringer Qualität auf eine Frage von geringer Qualität.
Theolodis

@Valamas: Kannst du bitte sagen, was die Verwendung von "event.keyCode == 10" in deiner Antwort ist?
Shashank.gupta40

1
Ich liebe Copy & Paster-Antworten
Dr. Max Völkel

2

Dies kann wie folgt auf ein einfaches, aber flexibles JQuery-Plugin erweitert werden:

$.fn.enterKey = function (fnc, mod) {
    return this.each(function () {
        $(this).keypress(function (ev) {
            var keycode = (ev.keyCode ? ev.keyCode : ev.which);
            if ((keycode == '13' || keycode == '10') && (!mod || ev[mod + 'Key'])) {
                fnc.call(this, ev);
            }
        })
    })
}

So

$('textarea').enterKey(function() {$(this).closest('form').submit(); }, 'ctrl')

sollte ein Formular senden, wenn der Benutzer die Strg-Eingabetaste drückt, wobei der Schwerpunkt auf dem Textbereich des Formulars liegt.

(Dank an https://stackoverflow.com/a/9964945/1017546 )


0
$('my_text_area').focus(function{ set_focus_flag });

//ctrl on key down set flag

//enter on key down = check focus flag, check ctrl flag

0

Zuerst müssen Sie ein Flag setzen, wenn Ctrlgedrückt wird. Führen Sie diesen Onkeydown durch. dann müssen Sie den Keydown von enter überprüfen. Deaktivieren Sie das Flag, wenn Sie ein Keyup für sehen Ctrl.


0

Vielleicht etwas spät zum Spiel, aber hier ist, was ich benutze. Außerdem wird das Senden des Formulars erzwungen, das das aktuelle Ziel des Cursors ist.

$(document.body).keypress(function (e) {
    var $el = $(e.target);
    if (e.ctrlKey && e.keyCode == 10) {
        $el.parents('form').submit();
    } else if (e.ctrlKey && e.keyCode == 13) {
        $el.parents('form').submit();
    }
});

Sie könnten das " if... else if" zu einem einzigen vereinfachen if (e.ctrlKey && (e.keyCode == 10 || e.keyCode == 13)).
Rory O'Kane
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.