2009-11-05 11 views
69

Jak wywołać coś, gdy kursor znajduje się wewnątrz TEXTAREA i Ctrl + Wprowadź jest wciśnięty? Korzystanie z jQuery. DziękiCtrl + Enter jQuery w TEXTAREA

+0

zaakceptowana odpowiedź nie działa. Zmień zaakceptowaną odpowiedź – peter

Odpowiedz

101

Możesz użyć flagi event.ctrlKey aby sprawdzić, czy klucz Ctrl jest wciśnięty, coś takiego:

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

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

Sprawdź powyższy fragment here.

+11

To nie działa w przeglądarce Google Chrome. Po naciśnięciu Ctrl + Enter kod klawisza to "10", a nie "13". – Znarkus

+30

To nie działa. Rozwiązanie Yarolslava Jakowlewa działa poprawnie. Zmień zaakceptowaną odpowiedź, aby zaoszczędzić czas. –

+0

Nie działa również w Operze. –

0

najpierw musisz ustawić flagę po naciśnięciu klawisza Ctrl, zrób to na bieżąco. wtedy musisz sprawdzić klucz keydown dla enter. odznacz flagę, gdy pojawi się kluczowanie dla Ctrl.

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

Właściwie ten załatwia sprawę i działa we wszystkich przeglądarkach:

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

link js fiddle

+0

Skrzypce nie działa w Firefoksie 27, co jest nie tak? – CoDEmanX

+0

Po prostu wywołaj dodaj 'zdarzenie':' if ((event.keyCode == 10 || event.keyCode == 13) && event.ctrlKey) ' – terales

+2

@Yaroslav: Czy możesz powiedzieć, jaki jest pożytek z" event.keyCode == 10 "w ciebie odpowiedzieć. –

4

znalazłem odpowiedzi innych osób albo niekompletne lub nie kompatybilne z różnymi przeglądarkami.

Ten kod działa na Google Chrome.

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

Czy możesz poprawić odpowiedź, dodając dalsze wyjaśnienia? Dzięki :) W przeciwnym razie byłaby to po prostu niska jakość odpowiedzi na pytanie o niskiej jakości. – Theolodis

+0

@Valamas: Czy możesz powiedzieć, jakie jest użycie "event.keyCode == 10" w odpowiedzi. –

+0

Uwielbiam kopiować i wstawiać odpowiedzi – xamde

2

ten może być przedłużony do prostego, ale elastyczne jQuery plugin jak w:

$.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); 
      } 
     }) 
    }) 
} 

Zatem

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

powinien złożyć formularz, gdy użytkownik naciśnie Ctrl-Enter z skoncentruj się na textarea tego formularza.

(Z podziękowaniami dla https://stackoverflow.com/a/9964945/1017546)

27

rozwiązanie uniwersalne

Obsługuje OS X, jak również.

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

Nie ignoruj ​​tej odpowiedzi, ponieważ ma niższy wynik, to tylko nowsza odpowiedź, w rzeczywistości jest lepsza. –

0

Może trochę spóźniony do gry, ale tutaj jest to, czego używam. Wymusi również przesłanie formularza, który jest bieżącym celem kursora.

$(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(); 
    } 
}); 
Powiązane problemy