“Enter”的KeyDown事件会导致意外结果

时间:2012-12-21 10:47:13

标签: javascript jquery events cross-browser enter

简介
我正在创建一个自定义的Wysiwyg / Rich Text Editor(RTE),因为我找到的那些并没有满足我在简单性和自定义方面的需求。
我看过了:
- CKEditor
- TinyMCE
- 等等

情况
我有一个Textarea和一个Iframe。 Textarea保存数据库中的信息。在$(window).load (function () {,Textarea将隐藏,其内容将被designMode = "on";复制到iframe。

换行
当你按下'Enter'时,除了换行符之外,一切都很好。 在每个浏览器中,结果都不同:
- <p>:Opera&amp; IE
- <div>:Safari&amp;铬
- <br>:Firefox

这不是一个可靠的结果所以我决定当有人点击Enter时必须放置<br>。因此,当有人想要一个新的paragraphe时,他会两次点击Enter,并且会放置两个<br>

因此我使用keyCode 13(Enter)构建了一个KeyDown事件 在函数中,我使用以下方法阻止了默认操作:
- event.preventDefault (); IE9 +,FF,CHROME,SAFARI和OPERA
- event.returnValue = false; IE8 -

然后插入用于添加自定义<br>的代码:
- pasteHTML IE
- insertHTML FF,CHROME,SAFARI和OPERA

的jsfiddle
上述两个代码均适用于IE7 / 8/9,Firefox,Chrome,Opera和Safari,但随后出现了一些奇怪的结果。为了自己查看错误,我在这里创建了一个JSFiddle:http://jsfiddle.net/RickS/RZ4Re/

错误 请参阅上面的JSFiddle
[1:对所有浏览器的影响]在'Two'之后点击'Enter'并且没有任何反应,但在'One'之后点击'Enter',你会看到代码有效。我已经发现当光标放在之前<ul> <ol><p>这样的块元素时,<br>将不会被放入的地方。
该错误不会出现在内联元素中 期望的结果:在块元素之前放置<br>

[2:对IE7 / 8/9的影响]在'Three'(列表项)和'Four'之后点击'Enter'消失。输入内容并再次点击“Enter”。现在'五'消失了 而奇怪的部分:点击“一个”这个词。 “四个”和“五个”再次出现,并且从未删除。 期望的结果:当您创建另一个列表项时,列表下方的内容保持可见。

搜索
我已经调查了这个问题一个多星期了,但似乎无法在任何地方找到解决方案 关于Stack Overflow这篇文章我认为很接近,但没有解决我的问题:Make a <br> instead of <div></div> by pressing Enter on a contenteditable

解决方案需要在IE9中进行跨浏览(如果可能的话还有7和8),Firefox,Chrome,Safari和Opera。

我希望有人可以帮我解决这个问题 所以在前面:非常感谢你!

瑞克

0 个答案:

没有答案