2009-11-05 6 views
69

Wie kann ich etwas auslösen, wenn der Cursor innerhalb TEXTAREA- ist und Ctrl +Geben Sie gedrückt wird? Mit jQuery. DankeStrg + Enter jQuery in TEXTAREA-

+0

Die Antwort, die Sie angenommen haben, funktioniert nicht. Bitte ändern Sie Ihre angenommene Antwort – peter

Antwort

101

können Sie die event.ctrlKey Flag verwenden, um zu sehen, ob die Ctrl Taste gedrückt wird, etwa wie folgt:

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

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

Überprüfen Sie das obige Snippet here.

+11

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

+30

Dies funktioniert nicht. Die Lösung von Yarolslav Yakovlev funktioniert einwandfrei. Bitte ändern Sie die angenommene Antwort, um Zeit zu sparen. –

+0

Funktioniert auch nicht in Opera. –

0

Zuerst müssen Sie eine Flagge setzen, wenn Ctrl gedrückt wird, tun Sie dies onkeydown. dann musst du den Keydown von Enter überprüfen. Deaktivieren Sie das Flag, wenn Sie eine Tastenkombination für Ctrl sehen.

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 
117

Eigentlich tut dies eine der Trick und funktioniert in allen Browsern:

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

Link zu js fiddle

+0

Die Geige funktioniert nicht in Firefox 27, was ist los? – CoDEmanX

+0

Rufen Sie einfach add 'event':' if ((event.keyCode == 10 || event.keyCode == 13) && event.ctrlKey) ' – terales

+2

@Yaroslav: Können Sie bitte sagen, was die Verwendung von" event.keyCode "ist == 10 "in dir antworten. –

4

fand ich Antworten anderer entweder unvollständig oder nicht Cross-Browser kompatibel.

Dieser Code funktioniert Google Chrome.

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

Könnten Sie Ihre Antwort verbessern, indem Sie weitere Erklärungen hinzufügen? Danke :) Sonst wäre das nur eine minderwertige Antwort auf eine minderwertige Frage. – Theolodis

+0

@Valamas: Können Sie bitte sagen, was die Verwendung von "event.keyCode == 10" in Ihrer Antwort bedeutet. –

+0

Ich liebe Copy & Paster Antworten – xamde

2

Dies kann in einer einfachen, aber flexible JQuery-Plugin erweitert werden:

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

sollte ein Formular einreichen, wenn der Benutzer drückt Strg-Eingabe mit

$.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 Konzentriere dich auf das Textfeld dieses Formulars.

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

27

Universelle Lösung

Unterstützt auch OS X.

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

Ignorieren Sie diese Antwort nicht, weil es eine niedrigere Punktzahl hat, es ist nur eine neuere Antwort, es ist eigentlich besser. –

0

Vielleicht ein bisschen spät zum Spiel, aber hier ist was ich benutze. Es wird auch das Senden des Formulars erzwingen, 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(); 
    } 
});