Ctrl +在TEXTAREA中输入jQuery


Answers:


128

您可以使用该event.ctrlKey标志来查看是否Ctrl按下了键,如下所示:

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

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

此处查看上面的代码段。


15
这在Google Chrome中不起作用。当按Ctrl + Enter时,键代码10不是13
Znarkus

39
这是行不通的。Yarolslav Yakovlev的以下解决方案可以正常工作。请更改接受的答案以节省时间。
菲尔·里基茨

1
@Replete您测试了哪个环境?是否有关于keyCode 10的文档?
Sanghyun Lee

keyCode 10不应再在Chrome上发生,请参见bugs.chromium.org/p/chromium/issues/detail?id=79407
swissspidy

当触发keypress事件时,键码将为10,但keydownkeyup将报告13。仅测试镶边
iulo

137

实际上,这可以解决问题,并且可以在所有浏览器中使用:

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

链接到js小提琴

笔记:

  • 在Windows和Linux上的Chrome中,enter将注册为keyCode10,而不是13(错误报告)。因此,我们需要检查其中一个。
  • ctrlKeycontrol在Windows,Linux和MacOS(不command)。另请参阅metaKey

小提琴在Firefox 27中不起作用,怎么了?
CodeManX 2014年

4
@Yaroslav:您能否在回答中告诉“ event.keyCode == 10”的用途。
Shashank.gupta14年

3
如果还有人想知道keyCode 10和其他chrome东西,请阅读此内容
user2422869 2015年

1
@YaroslavYakovlev是否ctrlKey对应于Mac上的Command键?
Jacob Stamm

2
同样也要支持Mac:if ((e.keyCode == 10 || e.keyCode == 13) && (e.ctrlKey || e.metaKey))
Ilya Manyahin

81

通用解决方案

这也支持macOS:Ctrl+Enter⌘ Command+Enter将被接受。

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

15
不要忽略这个答案,因为它的分数较低,只是一个较新的答案,实际上更好。
大卫·贝尔

1
第一部分说明:在macOS上,e.ctrlKey检测⌃ Controle.metaKey检测⌘ Command。如果要同时按Ctrl-Enter和Command-Enter来触发行为,请使用此选项。
罗里·奥肯

你能解释一下为什么你接受e.keyCode10是指输入除13?该MDNkeyCode文档仅列出13作为输入的可能值,在多个浏览器和操作系统进行测试。
罗里·奥肯

1
@ RoryO'Kane显然,Windows和Linux上的某些版本的Chrome使用值10。
Flimm

4

我发现其他人的答案不完整或与跨浏览器不兼容。

此代码适用于谷歌浏览器。

$(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.gupta14年

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

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))
罗里·奥肯
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.