Ctrl + Enter jQuery в текстовой области



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

556   9  

9 ответов:

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

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

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

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

на самом деле это один делает трюк и работает во всех браузерах:

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

ссылке в JS скрипку

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

поддерживает OS X, а также.

if ((e.ctrlKey || e.metaKey) && (e.keyCode == 13 || e.keyCode == 10)) {
    // do something
}

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

этот код работает в google chrome.

$(function ()
{
    $(document).on("keydown", "#textareaId", function(e)
    {
        if ((e.keyCode == 10 || e.keyCode == 13) && e.ctrlKey)
        {
            alert('ctrl+enter');
        }
    });
});

Это может быть расширено до простого, но гибкого плагина 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)

$('my_text_area').focus(function{ set_focus_flag });

//ctrl on key down set flag

//enter on key down = check focus flag, check ctrl flag

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

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

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

Comments

  1. Den
    Den 4 года назад
    <p>UPD: Вот так точнее будет. И в предыдущем забыл переменную объявить :)</p>

    <pre>
    <code class="language-javascript">$('body').on('keydown', 'some-selector', function(e){

    var Key = (e.which || e.keyCode || 0);

    var Shift = (e.shiftKey);
    var Ctrl = (e.ctrlKey || e.metaKey);
    var Tab = (Key === 9);
    var Enter = (Key === 13 || Key === 10);

    var Up = (Key === 38);
    var Down = (Key === 40);
    var Left = (Key === 37);
    var Right = (Key === 39);

    if (Enter) { do something... }
    if (Ctrl &amp;&amp; Enter) { do something... }
    ...
    });</code></pre>

    <p> </p>