目前没有办法限制中型编辑器字段的长度。github repo 中有一个未解决的问题,讨论了可以实现的方法。
浏览器不提供 contenteditable 字段的 maxLength 属性。造成这个问题的另一个原因是这些字段包含标记,因此如果要引入 maxLength ,则需要找到一种方法来忽略所有文本的长度,而是跟踪/限制“可打印字符”的数量。例子:
<b>Bold and <i>italic</i></b>
此文本的完整长度为 29 个字符(包括标签),但您可能希望长度仅计算为 15 个字符(“粗体和斜体”)。
这是一篇 stackoverflow 帖子,建议了限制 contenteditable 字段中文本长度的方法,这是媒体编辑器用于所见即所得文本的方法:
限制 ContentEditable div 中的字符数
乍一看,那篇文章中的解决方案本身是不够的,因为它们要么依赖于 jQuery(medium-editor 仅是 vanilla JS),要么依赖于.innerText
元素的属性(IE < 11 或 Firefox < 50 不支持) .
任何可以在 IE >= 9 中运行且不需要 jQuery 的解决方案都可以立即作为解决问题#962的功能引入到中等编辑器中
实现这一点的另一个困难部分是如何实际执行长度限制。在另一篇 stackoverflow 文章中提到的解决方案是监听keyup
和keydown
事件,它允许您检测用户何时键入并调用event.preventDefault()
以防止输入文本。这不考虑用户将内容粘贴到编辑器或是否document.execCommand()
执行(这是浏览器处理内置文本格式的方式)的时间。您可以侦听该paste
事件,但是如果不允许粘贴发生然后检查 html,您将无法在浏览器中一致地检测粘贴的内容。
因此,您可能不得不限制对编辑器中的更改做出反应,然后删除字符。这会产生闪烁文本的丑陋后果,但这是在用户粘贴或document.execCommand()
发生诸如此类的事情时始终限制长度的唯一方法。
这input
是检测document.execCommand()
除 IE + Edge 之外的所有浏览器的编辑器任何更改(包括粘贴和 )的好方法,IE + Edge 从未支持input
contenteditable 字段上的事件。但是,MediumEditor 公开了一个editableInput
事件,它将在所有浏览器中一致地模拟该事件(我恰好编写了该标准化,让我告诉你,在 IE + Edge 中很难伪造输入事件!)。