当用户在评论框中键入时,我的应用程序包括一个预编功能。以类似于Facebook和google+的方式,它将对用户进行查找,并将其建议为动态标签。
当用户选择所提供的标签之一时,它会作为一个元素输入到输入区域中。
我决定使用一个可编辑的div,但是遇到了一些问题。
事实证明,当插入的元素设置为contenteditable false时,firefox不会删除这些元素,而其他主流浏览器都会删除。
为了解决这个问题,我将插入的"user"标记设置为contenteditable=true,并编写了一个快速的jquery解决方案来解决这个问题。
除了一个主要问题之外,它还能完美地工作。如果区域中有多个标记,并且第一个标记没有任何文本,那么当用户删除最后一个标记时(假设使用从右到左的退格键删除),插入符号在最后一次删除后的位置会不正确。
再次出现打字,然后将位置恢复正常。
此问题仅发生在Firefox中
以下是显示问题的jsFiddle:
http://jsfiddle.net/gordyr/PESky/
将光标放在最后一个标记的末尾,然后按住退格键,直到删除所有元素。您将看到光标/插入符号向上移动并离开位置。
这很可能实际上是firefox本身的一个错误,但我正在寻找某种变通方法,因为如果没有javascript自动删除元素,就根本不会删除。
非常感谢
FF似乎留下了一些污垢,但您可以通过添加来清理
if (!$.trim(el.text())) {
el.empty();
}
这将检查contenteditable的innerText是否只包含空格或换行符。如果是,就清空它。在我的测试中似乎有效:http://jsfiddle.net/cBZ7k/
附带说明:您可能应该使用keydown
而不是keypress
来支持webkit。此外,e.which
足以获得keyCode,jQuery为您规范化此事件属性。