【问题标题】:Javascript: how to trigger a backspace keypress when pressing enter key in conteditable div?Javascript:在可竞争的 div 中按回车键时如何触发退格键?
【发布时间】:2016-05-31 16:19:04
【问题描述】:

由于一些复杂的原因,当用户在 contenteditable div 中按下回车键时,我不得不硬编码来模仿换行的正常行为,我的尝试是当按下回车键时,首先,然后创建两个 br 标签(工作正常),然后通过模仿用户按下退格键删除最后一个 br(工作不正常)。

我的尝试如下,它无法在插入符号位置模仿用户的退格键。

html:

<div id="hithere" style="border:1px solid black" contenteditable="true" autocomplete="off" spellcheck="false"></div>

Javascript:

<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.2.2/jquery.min.js"></script> 

<script>
$('div[contenteditable]').keydown(function(e) {

    if (e.keyCode === 13) {

                 document.execCommand('insertHTML', false, ' <br><br>');
                     $(function() {
                     var bre = $.Event('keypress');
                        bre.keyCode= 8; // enter
                    document.trigger(bre);
                    });
    }

    //   // prevent the default behaviour of return key pressed
    return false;
  });
</script>

【问题讨论】:

  • 你知道这看起来不太可能......你写“必须” - 这是否意味着你不能改变导致你相信这一点的代码?而且我仍然不知道如果你只想要一个休息时间,为什么要创建两个休息时间?
  • 不,我不能改变方法.. :(
  • 想告诉我们为什么您只需要一个`
    's 而创建两个?
  • 在你的 jsfiddle 中,新的换行符是通过使用 div 标签而不是 br 创建的,这就是为什么它看起来不错,因为整个代码在你的 JSfiddle 上根本不起作用...... br 部分在我的服务器上运行良好。
  • @RachelGallen 顺便说一句,如果您完全删除它,您的代码也可以工作,顺便说一句:P jsfiddle.net/svArtist/pjuf6zrc/1(即我假设某处存在上下文问题,否则这个问题不太可能出现) ...我只是希望我们更多地了解这里的上下文:D

标签: javascript jquery html css ajax


【解决方案1】:

我看到了您可能遇到但没有写的问题: &lt;br /&gt; 已插入,但当用户继续键入时,文本会插入到中断上方。

您可以使用 \r 和 \n 两个组件(回车和换行)将换行符作为文本插入

document.execCommand('insertText', false, '\r\n');

请看这里: https://jsfiddle.net/svArtist/6o5ao1bm/1/

【讨论】:

  • 另外,只有在输入密钥时才返回 false。 ...如果您需要删除某些内容,只需使用document.execCommand('delete');
  • 你的js注释掉的时候也是一样的
  • @BenPhilipp 非常感谢,这部分问题解决了,有没有类似 document.execCommand('pressUpArrowKey') 的东西?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-08-12
  • 1970-01-01
  • 2016-09-03
  • 1970-01-01
相关资源
最近更新 更多