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

HP.
quelle
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 .

CMS
quelle
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.
Jaroslaw Jakowlew
quelle
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
}
Serhii Matrunchyk
quelle
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');
        }
    });
});
Valamas
quelle
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 )

joeln
quelle
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
idrumgood
quelle
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.

mkoryak
quelle
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();
    }
});
Barry Chapman
quelle
Sie könnten das " if... else if" zu einem einzigen vereinfachen if (e.ctrlKey && (e.keyCode == 10 || e.keyCode == 13)).
Rory O'Kane