繁体   English   中英

textarea 控件 - 自定义行为 enter/ctrl+enter

[英]textarea control - custom behavior enter/ctrl+enter

我有以下简单的<textarea>

<textarea id="streamWriter" rows="1" cols="20" placeholder="Writer"></textarea>

我还有以下 jQuery/JavaScript 代码块:

$('textarea#streamWriter').keydown(function (e) {
    if (e.keyCode == 13) {
        if (e.ctrlKey) {
            alert('ctrl enter - go down a line as normal return would');
            return true;
        }
        e.preventDefault();
        alert('submit - not your default behavior');
    }
});

我试图强制不要在正常返回键下创建新的换行符。 但如果 Ctrl+Enter 被输入,我想要这种行为。

这确实检测到差异,但并没有强迫我需要的行为。 如果您使用过 Windows Live Messenger,我需要相同的文本框行为。 Enter 提交(在我的情况下,我将调用一个函数,但阻止 textarea 下一行)和 Ctrl+Enter 下一行。

解决方案? 谢谢。

更新:

$('textarea#streamWriter').keydown(function (e) {
    if (e.keyCode == 13) {
        if (e.ctrlKey) {
            //emulate enter press with a line break here.
            return true;
        }
        e.preventDefault();
        $('div#writerGadgets input[type=button]').click();
    }
});

以上做了我正在尝试做的事情。 只有部分可以模拟带有换行符的 enter press。 如果你知道,请告诉我如何做到这一点。

使用keypress代替keydown效果会好一点,但不能与Ctrl键一起使用; 我切换到shift键 - jsfiddle

编辑:据我所知,您将无法在跨浏览器中始终使用 Ctrl 键,因为浏览器将其用于自己的快捷方式。 使用 alt 键会遇到相同的情况。

再次编辑:我有一个适用于Ctrl键的解决方案 - jsfiddle

$('textarea#streamWriter').keydown(function (e) {
    if (e.keyCode === 13 && e.ctrlKey) {
        //console.log("enterKeyDown+ctrl");
        $(this).val(function(i,val){
            return val + "\n";
        });
    }
}).keypress(function(e){
    if (e.keyCode === 13 && !e.ctrlKey) {
        alert('submit');
        return false;  
    } 
});

编辑:这不是 100% 有效,只有当您不在文本中间时才有效。 必须想办法让代码在中间的文本上工作。

顺便说一句……你为什么要这样做? 如果用户在他们准备好之前按下Enter以创建一个新行并突然提交表单,这会不会让用户感到困惑?

清除VanillaJS

document.querySelector('#streamWriter').addEventListener('keydown', function (e) {
    if (e.keyCode === 13) {
        // Ctrl + Enter
        if(e.ctrlKey) {
            console.log('ctrl+enter');

        // Enter
        } else {
            console.log('enter');
        }
    }
});

Kevin B 的解决方案适用于 Mac,但不适用于 Windows。

在 Windows 上,当按下ctrl + enter时,keyCode 是 10 而不是 13。

在文本区域中 Ctrl+Enter jQuery

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM