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 .
10
nie 13
.
keypress
zdarzenia wyzwalającego kod keydown
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że metaKey
.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
}
e.ctrlKey
wykrywa ⌃ Control
i e.metaKey
wykrywa ⌘ Command
. Użyj tego, jeśli chcesz, aby Ctrl-Enter i Command-Enter wyzwalały zachowanie.
e.keyCode
of 10
to znaczy Enter 13
? W MDN keyCode
dokumentacja listy tylko 13
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');
}
});
});
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.
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();
}
});
if
… else if
” do jednego if (e.ctrlKey && (e.keyCode == 10 || e.keyCode == 13))
.