web-dev-qa-db-ja.com

TEXTAREAでCtrl + Enter jQuery

カーソルが[〜#〜] textarea [〜#〜]内にあるときに何かをトリガーする方法 Ctrl+Enter 押された? jQueryを使用します。ありがとう

80
HP.

event.ctrlKey フラグは、 Ctrl 次のようなキーが押されました:

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

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

上記のスニペット here を確認してください。

115
CMS

実際、これはトリックを行い、すべてのブラウザで動作します:

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

js fiddle へのリンク

129

ユニバーサルソリューション

OS Xもサポートします。

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

他のユーザーの回答が不完全であるか、ブラウザーに対応していないことがわかりました。

このコードはgoogle chromeで機能します。

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

これは、次のようにシンプルだが柔軟な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 のおかげで)

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

//ctrl on key down set flag

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

ゲームに少し遅れるかもしれませんが、ここで私が使用するものです。また、カーソルの現在のターゲットであるフォームの送信を強制します。

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

最初にフラグを設定する必要があります Ctrl が押されたら、これをキーダウンで行います。次に、Enterのキーダウンを確認する必要があります。キーアップが表示されたらフラグを解除します Ctrl

0
mkoryak