Ctrl +在 TEXTAREA 中使用 jQuery 输入

发布于 2024-08-11 01:05:43 字数 102 浏览 3 评论 0原文

当光标位于 TEXTAREA 内并且按下 Ctrl+Enter 时,如何触发某些操作?

我正在使用 jQuery。

How do I trigger something when the cursor is within TEXTAREA and Ctrl+Enter is pressed?

I am using jQuery.

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(10

遮了一弯 2024-08-18 01:05:43

实际上,这个方法可以解决问题,并且适用于所有浏览器:

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

链接到 js fiddle

注意:

  • 在 Windows 和 Linux 上的 Chrome 中,Enter 将注册为 keyCode 10,而不是 13 (错误报告)。所以我们需要检查其中任何一个。
  • ctrlKeycontrol(不是 命令)。另请参阅metaKey

Actually this one does the trick and works in all browsers:

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

Link to js fiddle.

Notes:

  • In Chrome on Windows and Linux, Enter would be registered as keyCode 10, not 13 (bug report). So we need to check for either.
  • ctrlKey is control on Windows, Linux and macOS (not command). See also metaKey.
终难愈 2024-08-18 01:05:43

您可以使用 event.ctrlKey 标志来查看如果按下 Ctrl 键。像这样的事情:

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

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

此处检查上面的代码片段。

You can use the event.ctrlKey flag to see if the Ctrl key is pressed. Something like this:

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

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

Check the above snippet here.

蓝海似她心 2024-08-18 01:05:43

通用解决方案

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

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

Universal solution

This supports macOS as well: both Ctrl+Enter and ⌘ Command+Enter will be accepted.

if ((e.ctrlKey || e.metaKey) && (e.keyCode == 13 || e.keyCode == 10)) {
    // do something
}
装纯掩盖桑 2024-08-18 01:05:43

我发现其他人的答案要么不完整,要么不跨浏览器兼容。

此代码适用于 Google Chrome。

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

I found answers of others either incomplete or not cross-browser compatible.

This code works in Google Chrome.

$(function ()
{
    $(document).on("keydown", "#textareaId", function(e)
    {
        if ((e.keyCode == 10 || e.keyCode == 13) && e.ctrlKey)
        {
            alert('Ctrl + Enter');
        }
    });
});
单身情人 2024-08-18 01:05:43

这可以扩展到一个简单但灵活的 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 时,应该提交一个表单,并将焦点放在该表单的文本区域上。

(感谢 如何使用 jQuery 检测键盘上的 Enter 键?

This can be extended to a simple, but flexible, jQuery plugin as in:

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

Thus

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

should submit a form when the user presses Ctrl + Enter with focus on that form's textarea.

(With thanks to How can I detect pressing Enter on the keyboard using jQuery?)

演多会厌 2024-08-18 01:05:43

值得注意的是 keyCode 已被弃用

您可以使用:

if((e.ctrlKey || e.metaKey) && e.key === "Enter")

它适用于 Mac 和 Windows。

使用 React + TS 看起来像这样:

const handleKeyDown = (e: React.KeyboardEvent<HTMLInputElement>) => {
     if((e.ctrlKey || e.metaKey) && e.key === "Enter"){
         //do something
     }
};

Worth noting that keyCode has been deprecated.

You can use:

if((e.ctrlKey || e.metaKey) && e.key === "Enter")

Which works on both Mac and Windows.

Using React + TS it looks something like this:

const handleKeyDown = (e: React.KeyboardEvent<HTMLInputElement>) => {
     if((e.ctrlKey || e.metaKey) && e.key === "Enter"){
         //do something
     }
};
云淡月浅 2024-08-18 01:05:43

event.keyCodeevent.which 已弃用。

以下方法可在 Mac 和 Windows 上处理 CTRL/Command + Enter(React)

import React from "react";

export const Component = () => {
    const keyDownHandler = (e: React.KeyboardEvent<HTMLTextAreaElement>) => {
        if ((e.ctrlKey || e.metaKey) && e.key == "Enter") {
            // handle Ctrl/Command + Enter
        }
    };
    
    return (
        <textarea onKeyDown={keyDownHandler} />
    );
};

event.keyCode and event.which are deprecated.

The following works to handle CTRL/Command + Enter on Mac and Windows (React)

import React from "react";

export const Component = () => {
    const keyDownHandler = (e: React.KeyboardEvent<HTMLTextAreaElement>) => {
        if ((e.ctrlKey || e.metaKey) && e.key == "Enter") {
            // handle Ctrl/Command + Enter
        }
    };
    
    return (
        <textarea onKeyDown={keyDownHandler} />
    );
};
离线来电— 2024-08-18 01:05:43
$('my_text_area').focus(function{ set_focus_flag });

//ctrl on key down set flag

//enter on key down = check focus flag, check ctrl flag
$('my_text_area').focus(function{ set_focus_flag });

//ctrl on key down set flag

//enter on key down = check focus flag, check ctrl flag
各自安好 2024-08-18 01:05:43

也许有点晚了,但这就是我使用的。它还将强制提交作为光标当前目标的表单。

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

Maybe a little late to the game, but here is what I use. It will also force submit of the form that is the current target of the cursor.

$(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();
    }
});
GRAY°灰色天空 2024-08-18 01:05:43

首先,您必须在按下 Ctrl 时设置一个标志;执行此 onkeydown 操作。

然后你必须检查Enter的按键。当您看到 Ctrl 按键时取消设置该标志。

First you have to set a flag when Ctrl is pressed; do this onkeydown.

Then you have to check the keydown of Enter. Unset the flag when you see a keyup for Ctrl.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文