You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

求助:contenteditable中Ctrl+Enter插入换行异常问题

问题:contenteditable元素中Ctrl+Enter插入换行的兼容性问题

我想实现用户按下Ctrl+Enter时,在contenteditable元素里插入换行。参考了以下StackOverflow问题编写代码:

  • Insert newline on enter key in contenteditable div
  • How to insert a (Carriage Return) in a Javascript String?
  • Dealing with line Breaks on contentEditable DIV
  • Problem detecting Newlines in JavaScript Range Object

我的HTML代码:

<span id="myInput" contenteditable="true" style="white-space: pre;"></span>

JavaScript代码:

let myInput = document.getElementById('myInput');

myInput.addEventListener('keypress', (event) => {
    if (event.key == 'Enter' && event.ctrlKey == true) {
        event.preventDefault();
        this.insertNewLine();     
    }
})

function insertNewLine(text) {
    var sel, range, html;
    sel = window.getSelection();
    range = sel.getRangeAt(0);
    range.deleteContents();
    
    // 并非始终生效
    var textNode = document.createTextNode("\n");
    
    // 始终生效
    //var textNode = document.createTextNode("\n\u200b");
    
    range.insertNode(textNode);
    range.setStartAfter(textNode);
    range.collapse(false);
    sel.removeAllRanges();
    sel.addRange(range);
}

但按下Ctrl+Enter时出现了异常:

  • 在Chrome中,换行并非总能插入成功
  • 在Firefox中,换行已插入,但光标未跳转到下一行

我发现如果在\n后添加零宽空格(\u200b),代码就能始终生效,但我希望不用插入这个零宽空格就能解决问题,有人能帮忙分析原因吗?

内容的提问来源于stack exchange,提问作者Alphonsio

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.28 20:12:46