小编典典

如何检测“ shift + enter”并在Textarea中生成新行?

javascript

当前,如果此人enter在文本区域内按下,则将提交表单。
很好,我想要那个。

但是,当他们键入shift+时enter,我希望文本区域移至下一行:\n

我该如何JQuery尽可能简单地用普通JavaScript 做到这一点?


阅读 303

收藏
2020-05-01

共1个答案

小编典典

我的解决方案

我想你可以做这样的事情。

编辑: 更改代码以工作,无论插入位置

代码的第一部分是获得插入符的位置。

function getCaret(el) { 
    if (el.selectionStart) { 
        return el.selectionStart; 
    } else if (document.selection) { 
        el.focus();
        var r = document.selection.createRange(); 
        if (r == null) { 
            return 0;
        }
        var re = el.createTextRange(), rc = re.duplicate();
        re.moveToBookmark(r.getBookmark());
        rc.setEndPoint('EndToStart', re);
        return rc.text.length;
    }  
    return 0; 
}

然后在Shift+ Enter在一起时相应地替换textarea值,如果Enter单独按下则提交表格。

$('textarea').keyup(function (event) {
    if (event.keyCode == 13) {
        var content = this.value;  
        var caret = getCaret(this);          
        if(event.shiftKey){
            this.value = content.substring(0, caret - 1) + "\n" + content.substring(caret, content.length);
            event.stopPropagation();
        } else {
            this.value = content.substring(0, caret - 1) + content.substring(caret, content.length);
            $('form').submit();
        }
    }
});
2020-05-01