Ctrl + Enter jQuery в ТЕКСТАРЕ

92

Как мне вызвать что-то, когда курсор находится в пределах ТЕКСТА и нажата кнопкаCtrl + Enter? Используя jQuery . Благодарность

HP.
источник
принятый вами ответ не работает. Пожалуйста, измените принятый ответ
peterchaula

Ответы:

128

Вы можете использовать event.ctrlKeyфлаг, чтобы увидеть, Ctrlнажата ли клавиша, примерно так:

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

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

Проверьте приведенный выше фрагмент здесь .

Кристиан К. Сальвадо
источник
15
Это не работает в Google Chrome. При нажатии Ctrl + Enter код клавиши - это 10, а не 13.
Знаркус
39
Это не работает. Приведенное ниже решение Яролслава Яковлева работает правильно. Пожалуйста, измените принятый ответ, чтобы сэкономить время людей.
Фил Рикеттс,
1
@Replete Какую среду вы тестировали? Есть ли документация по keyCode 10?
Санхён Ли,
keyCode 10 больше не должен появляться в Chrome, см. bugs.chromium.org/p/chromium/issues/detail?id=79407
swissspidy
при срабатывании keypressсобытия код клавиши будет 10, но keydownили keyupбудет сообщать 13. Только тестовый хром
iulo 01
137

На самом деле это помогает и работает во всех браузерах:

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

ссылка на скрипку js .

Примечания:

  • В Chrome для Windows и Linux enterбудет зарегистрировано keyCode10, а не 13 ( отчет об ошибке ). Так что нам нужно проверить и то, и другое.
  • ctrlKeyесть controlв Windows, Linux и macOS (нет command). См. Также metaKey.
Ярослав Яковлев
источник
Скрипка не работает в Firefox 27, что случилось?
CodeManX 06
4
@ Ярослав: Не могли бы вы рассказать, какой смысл в вашем ответе "event.keyCode == 10".
Shashank.gupta40
3
Если кто-то все еще задается вопросом о keyCode 10 и прочем хроме, прочтите это .
user2422869
1
@YaroslavYakovlev ctrlKeyсоответствует клавише Command на Mac?
Джейкоб Штамм,
2
В поддержку Mac тоже:if ((e.keyCode == 10 || e.keyCode == 13) && (e.ctrlKey || e.metaKey))
Илья Маняхин 03
81

Универсальное решение

Это также поддерживает macOS: будут приняты как Ctrl+, так Enterи ⌘ Command+ Enter.

if ((e.ctrlKey || e.metaKey) && (e.keyCode == 13 || e.keyCode == 10)) {
    // do something
}
Сергей Матрунчик
источник
15
Не игнорируйте этот ответ, потому что у него более низкий балл, это просто новый ответ, на самом деле он лучше.
Дэвид Белл
1
Объяснение первой части: В macOS e.ctrlKeyобнаруживает ⌃ Controlи e.metaKeyобнаруживает ⌘ Command. Используйте это, если вы хотите, чтобы сочетание клавиш Ctrl-Enter и Command-Enter запускало поведение.
Рори О'Кейн
Можете ли вы объяснить , почему вы принимаете e.keyCodeиз 10означает Enter в дополнение к 13? В документации MDNkeyCode указано только 13возможное значение для Enter, протестированное в нескольких браузерах и операционных системах.
Рори О'Кейн,
1
@ RoryO'Kane Очевидно, некоторые версии Chrome в Windows и Linux используют значение 10.
Flimm
4

Я нашел ответы других либо неполными, либо несовместимыми с кроссбраузерностью.

Этот код работает в Google Chrome.

$(function ()
{
    $(document).on("keydown", "#textareaId", function(e)
    {
        if ((e.keyCode == 10 || e.keyCode == 13) && e.ctrlKey)
        {
            alert('ctrl+enter');
        }
    });
});
Валамас
источник
2
Не могли бы вы улучшить свой ответ, добавив дополнительные пояснения? Спасибо :) В противном случае это был бы просто некачественный ответ на некачественный вопрос.
Theolodis
@Valamas: Скажите, пожалуйста, какой смысл в вашем ответе "event.keyCode == 10".
Shashank.gupta40
1
Я люблю копировать и пастер ответы
доктор Макс Фёлькель
2

Его можно расширить до простого, но гибкого плагина JQuery, как показано ниже:

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

Таким образом

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

должен отправить форму, когда пользователь нажимает ctrl-enter с фокусом на текстовом поле этой формы.

(С благодарностью https://stackoverflow.com/a/9964945/1017546 )

Джоэлн
источник
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
idrumgood
источник
0

сначала вы должны установить флаг при Ctrlнажатии, сделайте это onkeydown. тогда вы должны проверить нажатие клавиши ввода. снимите флаг, когда увидите клавиатуру для Ctrl.

Макоряк
источник
0

Возможно, немного опоздал с игрой, но вот что я использую. Он также принудительно отправит форму, которая является текущей целью курсора.

$(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();
    }
});
Барри Чепмен
источник
Вы можете упростить « ifelse if» до одного if (e.ctrlKey && (e.keyCode == 10 || e.keyCode == 13)).
Рори О'Кейн