文本区域控制-自定义行为输入/ctrl+enter

textarea control - custom behavior enter/ctrl+enter

本文关键字:输入 ctrl+enter 自定义 区域 控制 文本      更新时间:2023-09-26

我有以下简单的<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,我需要相同的文本框行为。按回车键提交(在我的例子中,我将调用一个函数,但会阻止文本区向下移动),按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();
    }
});

以上就是我想要做的。这里只有用换行符模拟回车键的部分。如果你知道,请告诉我怎么做。

使用keypress代替keydown工作稍微好一点,但是不能与Ctrl键一起工作;我切换到shift键- jsfiddle。

编辑:据我所知,你将无法使用Ctrl键一致跨浏览器,因为浏览器使用它自己的快捷键。

再次编辑:我有一个解决方案,可以使用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%的工作,它只工作,如果你不在文本的中间。我得想办法让代码在中间的文字上起作用

顺便说一下…你为什么这样做?如果用户按输入来创建新行,表单在他们准备好之前就突然提交了,这不会让用户感到困惑吗?

Clear 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。