2

我在编写带有按用户添加和删除段落的选项的小型 CMS 时遇到问题。在所有浏览器中,BACKSPACE 按钮的作用都有些不同。我想要实现的是用户可以通过按 ENTER 添加段落(P)并通过使用 BACKSPACE 删除文本来删除 P,我找不到任何好的答案。

我做了这个脚本:

$(document).keydown(function(e){ 
    if ( e.keyCode == 8 && e.target.tagName != 'DIV' ) {
    e.preventDefault();
}
});

如果 contenteditable DIV 未获得焦点,可防止通过按 BACKSPACE 删除新添加的段落。也可以避免导航前一页的问题。

<div class="wrap" contenteditable="true">
    <p class="paragraph" id="parg1">
        I want BACKSPACE not to delete first P tag - BACKSPACE should delete its text but not P itself.</p>
    <p class="paragraph" id="parg2">
        second paragraph
    </p></div>

查看Firefox下jsfiddle中的代码

在 CHROME 中一切正常,我希望它至少在 Firefox 中也能正常工作。

OPERA 几乎可以满足我的需要,只是如果通过按 BACKSPACE 键合并第二段,它会在第一段的第一个字母之前添加 2 个空格。但是这些浏览器的优点是它们根本不会删除第一段。

合并段落时,IE 会比 OPERA 添加更多空格,但稍后可以删除第一段 - 不幸的是。

但我真正需要的是 Firefox 才能工作,它会做一些疯狂的事情。我希望 BACKSPACE 永远不要删除第一个 P 标签。否则,文本光标会从 .paragraph 变为 .wrap。我希望总是有第一个 P - BACKSPACE 应该删除它的文本而不是 P 本身。

此外,如果您在光标放在第二段的第一个字母之前按 BACKSPACE 键,则删除 P 标记并且光标“掉出”到 .wrap。如果您再次按 BACKSPACE,光标会跳到前一个 P。但是如果您稍后按 ENTER(创建新 P)然后再次退格,突然一切都按预期工作 - 光标会跳到前一个 P,而不会掉到 .wrap。为什么?我希望它从一开始就这样工作,就像在 Chrome 中一样。

它是某种 Firefox 错误吗?可以用jquery修复吗?

4

0 回答 0