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

Asked
Viewd57557

92

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

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

    peterchaula13 июня 2017, 11:10

8 ответов

127

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

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

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

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

  • keyCode 10 больше не должен появляться в Chrome, см. https://bugs.chromium.org/p/chromium/issues/detail?id=79407

    swissspidy03 августа 2017, 13:09
  • Это не работает в Google Chrome.При нажатии Ctrl + Enter код клавиши будет 10, а не 13.

    Znarkus24 ноября 2011, 11:46
  • при запуске события keypress код клавиши будет 10, но keydown или keyup сообщат 13. Только тестовый хром

    iulo01 сентября 2017, 03:06
  • Это не работает.Приведенное ниже решение Яролслава Яковлева работает правильно.Измените принятый ответ, чтобы сэкономить время людей.

    Phil Ricketts20 мая 2012, 14:56
  • @Replete Какую среду вы тестировали?Есть ли документация по keyCode 10?

    Sanghyun Lee14 февраля 2014, 09:39
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)).

    Rory O'Kane26 марта 2019, 05:59
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
 
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 )

137

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

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

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

Примечания:

  • В Chrome для Windows и Linux enter будет зарегистрирован как keyCode 10, а не 13 ( отчет об ошибке ).Поэтому нам нужно проверить и то, и другое.
  • ctrlKey - это элемент управления в Windows, Linux и macOS (не command ).См. Также metaKey .
  • @ Shashank.gupta40 Из ответа, помеченного как ответ: Это не работает в Google Chrome.При нажатии Ctrl + Enter код клавиши будет 10, а не 13

    Yaroslav Yakovlev09 сентября 2014, 20:18
  • Просто позвоните по телефону add event: if ((event.keyCode == 10 || event.keyCode == 13) && event.ctrlKey)

    terales11 апреля 2014, 13:59
  • @ Ярослав: Скажите, пожалуйста, какой смысл в вашем ответе от «event.keyCode == 10»?

    Shashank.gupta4009 сентября 2014, 06:45
  • Также для поддержки Mac: if ((e.keyCode == 10 || e.keyCode == 13) && (e.ctrlKey || e.metaKey))

    Ilya Manyahin03 августа 2017, 18:15
  • Эта ошибка Chrome уже давно исправлена, см. https://bugs.chromium.org/p/chromium/issues/detail?id=79407

    swissspidy03 августа 2017, 13:09
  • Если кому-то все еще интересно узнать о keyCode 10 и других элементах Chrome, прочтите это .

    user242286923 марта 2015, 10:28
  • @YaroslavYakovlev соответствует ли ctrlKey клавише Command на Mac?

    Jacob Stamm13 октября 2015, 11:50
  • В Firefox 27 скрипка не работает, в чем дело?

    CodeManX06 марта 2014, 21:17
80

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

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

 if ((e.ctrlKey || e.metaKey) && (e.keyCode == 13 || e.keyCode == 10)) {
    // do something
}
 
  • Объяснение первой части: в macOS e.ctrlKey обнаруживает ⌃ Control, а e.metaKey обнаруживает ⌘ Command. Используйте это, если вы хотите, чтобы сочетание клавиш Ctrl-Enter и Command-Enter запускало поведение.

    Rory O'Kane26 марта 2019, 05:53
  • Не игнорируйте этот ответ, потому что у него более низкий балл, это просто новый ответ, он на самом деле лучше.

    David Bell16 марта 2017, 15:38
  • Не могли бы вы объяснить, почему вы принимаете e.keyCode из 10 для обозначения Enter в дополнение к 13 документации MDN keyCode указано только 13 в качестве возможного значения для Enter, протестированонесколько браузеров и операционных систем.

    Rory O'Kane26 марта 2019, 06:06
4

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

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

 $(function ()
{
    $(document).on("keydown", "#textareaId", function(e)
    {
        if ((e.keyCode == 10 || e.keyCode == 13) && e.ctrlKey)
        {
            alert('ctrl+enter');
        }
    });
});
 
  • @Valamas: Не могли бы вы рассказать, как используется в вашем ответе «event.keyCode == 10»?

    Shashank.gupta4009 сентября 2014, 06:45
  • Не могли бы вы улучшить свой ответ, добавив дополнительные пояснения?Спасибо :) В противном случае это был бы просто некачественный ответ на некачественный вопрос.

    Theolodis15 мая 2014, 05:04
  • Я люблю копировать и вставлять ответы

    Dr. Max Völkel08 декабря 2014, 11:26
0

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