Jak wywołać coś, gdy kursor znajduje się wewnątrz TEXTAREA i naciśnięty jest Ctrl+ Enter? Korzystanie z jQuery . Dzięki
92
Jak wywołać coś, gdy kursor znajduje się wewnątrz TEXTAREA i naciśnięty jest Ctrl+ Enter? Korzystanie z jQuery . Dzięki
Odpowiedzi:
Możesz użyć
event.ctrlKey
flagi, aby sprawdzić, czy Ctrlklawisz jest wciśnięty, na przykład:$('#textareaId').keydown(function (e) { if (e.ctrlKey && e.keyCode == 13) { // Ctrl-Enter pressed } });
Sprawdź powyższy fragment tutaj .
źródło
10
nie13
.keypress
zdarzenia wyzwalającego kodkeydown
keyup
Właściwie ten załatwia sprawę i działa we wszystkich przeglądarkach:
if ((event.keyCode == 10 || event.keyCode == 13) && event.ctrlKey)
link do js fiddle .
Uwagi:
keyCode
10, a nie 13 ( raport o błędzie ). Więc musimy to sprawdzić.ctrlKey
jest controlw systemie Windows, Linux i macOS (nie command). Zobacz takżemetaKey
.źródło
ctrlKey
odpowiada klawiszowi Command na komputerach Mac?if ((e.keyCode == 10 || e.keyCode == 13) && (e.ctrlKey || e.metaKey))
Uniwersalne rozwiązanie
Obsługuje również macOS: zarówno Ctrl+, jak Enteri ⌘ Command+ Enterbędą akceptowane.
if ((e.ctrlKey || e.metaKey) && (e.keyCode == 13 || e.keyCode == 10)) { // do something }
źródło
e.ctrlKey
wykrywa⌃ Control
ie.metaKey
wykrywa⌘ Command
. Użyj tego, jeśli chcesz, aby Ctrl-Enter i Command-Enter wyzwalały zachowanie.e.keyCode
of10
to znaczy Enter13
? W MDNkeyCode
dokumentacja listy tylko13
jako możliwej wartości dla wejść, testowane na wielu przeglądarkach i systemach operacyjnych.Znalazłem odpowiedzi innych osób albo niekompletne, albo niezgodne z różnymi przeglądarkami.
Ten kod działa w Google Chrome.
$(function () { $(document).on("keydown", "#textareaId", function(e) { if ((e.keyCode == 10 || e.keyCode == 13) && e.ctrlKey) { alert('ctrl+enter'); } }); });
źródło
Można to rozszerzyć na prostą, ale elastyczną wtyczkę JQuery, 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); } }) }) }
A zatem
$('textarea').enterKey(function() {$(this).closest('form').submit(); }, 'ctrl')
powinien przesłać formularz, gdy użytkownik naciśnie ctrl-enter, skupiając się na obszarze tekstowym tego formularza.
(Dzięki https://stackoverflow.com/a/9964945/1017546 )
źródło
$('my_text_area').focus(function{ set_focus_flag }); //ctrl on key down set flag //enter on key down = check focus flag, check ctrl flag
źródło
najpierw musisz ustawić flagę, kiedy Ctrljest wciśnięty, zrób to onkeydown. następnie musisz sprawdzić klawisz wejścia enter. odznacz flagę, gdy zobaczysz klucz dla Ctrl.
źródło
Może trochę za późno do gry, ale oto 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(); } });
źródło
if
…else if
” do jednegoif (e.ctrlKey && (e.keyCode == 10 || e.keyCode == 13))
.