3

我正在使用中型编辑器。

初始化medium-editor类的代码如下

var editor = new MediumEditor(el, {
            placeholder: false,
            toolbar: false
        })

我正在使用以下方法为我的自定义字段绑定媒体编辑器。

editor.subscribe('editableInput', function (event, currentEditable) {
// my code goes here
}

我的问题是,我无法限制我的中型编辑器字段的 maxLength。我还没有找到任何传递给中等编辑器类来限制最大字符的选项。

有什么方法可以限制中编辑器中的最大字符数?

4

1 回答 1

3

目前没有办法限制中型编辑器字段的长度。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 文章中提到的解决方案是监听keyupkeydown事件,它允许您检测用户何时键入并调用event.preventDefault()以防止输入文本。这不考虑用户将内容粘贴到编辑器或是否document.execCommand()执行(这是浏览器处理内置文本格式的方式)的时间。您可以侦听该paste事件,但是如果不允许粘贴发生然后检查 html,您将无法在浏览器中一致地检测粘贴的内容。

因此,您可能不得不限制对编辑器中的更改做出反应,然后删除字符。这会产生闪烁文本的丑陋后果,但这是在用户粘贴或document.execCommand()发生诸如此类的事情时始终限制长度的唯一方法。

input是检测document.execCommand()除 IE + Edge 之外的所有浏览器的编辑器任何更改(包括粘贴和 )的好方法,IE + Edge 从未支持inputcontenteditable 字段上的事件。但是,MediumEditor 公开了一个editableInput事件,它将在所有浏览器中一致地模拟该事件(我恰好编写了该标准化,让我告诉你,在 IE + Edge 中很难伪造输入事件!)。

于 2017-02-11T02:15:57.903 回答