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.ctrlKeyflagi, 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 .
10nie 13.
keypresszdarzenia wyzwalającego kod keydownkeyup
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:
keyCode10, a nie 13 ( raport o błędzie ). Więc musimy to sprawdzić.ctrlKeyjest controlw systemie Windows, Linux i macOS (nie command). Zobacz także metaKey.ctrlKeyodpowiada 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.ctrlKeywykrywa ⌃ Controli e.metaKeywykrywa ⌘ Command. Użyj tego, jeśli chcesz, aby Ctrl-Enter i Command-Enter wyzwalały zachowanie.
e.keyCodeof 10to znaczy Enter 13? W MDN keyCodedokumentacja listy tylko 13jako 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)).