CK Editor限制40字符后输入超量触发冻结问题求助
CKEditor字符限制后冻结的问题解决
嘿,我来帮你排查这个问题!你遇到的编辑器冻结情况,大概率是因为你在key事件里无差别地阻止了所有键盘事件的默认行为——包括退格、删除这些用来修改内容的关键操作,导致编辑器完全没法响应你的编辑动作了。
问题出在哪?
你之前的代码逻辑应该是:只要字符数超过40,就直接阻止键盘事件。但这样一来,哪怕你按删除键想删掉多余字符,事件也被阻止了,编辑器自然就冻住动不了了。
修正后的代码示例
我们需要区分「输入新字符」和「删除/修改内容」的操作,只在输入超限时阻止输入类按键:
CKEDITOR.on('instanceReady', function(evt) { const editor = evt.editor; // 处理键盘输入 editor.on('key', function(event) { // 获取编辑器纯文本内容的长度(去掉首尾空格) const currentContentLength = editor.document.getBody().getText().trim().length; // 定义允许的非输入类按键:退格、删除、方向键、Tab、回车 const allowedKeys = [8, 46, 37, 38, 39, 40, 9, 13]; // 判断当前按键是否是输入类按键 const isInputting = allowedKeys.indexOf(event.data.keyCode) === -1; // 只有当内容已达40字符,且是输入新字符时才阻止 if (currentContentLength >= 40 && isInputting) { event.cancel(); } }); // 额外处理粘贴场景(防止一次性粘贴超过40字符) editor.on('paste', function(event) { const currentLength = editor.document.getBody().getText().trim().length; const pasteContent = event.data.dataValue.trim(); const remainingChars = 40 - currentLength; if (pasteContent.length > remainingChars) { // 截断粘贴内容到允许的长度 event.data.dataValue = pasteContent.substring(0, remainingChars); } }); });
关键说明
- 区分按键类型:我们把退格、删除、方向键等必要操作的按键排除在外,只阻止输入新字符的行为,这样删除、移动光标等操作依然能正常进行。
- 处理粘贴场景:用户可能直接粘贴大段内容,单独监听
paste事件可以提前截断内容,避免超量输入。
这样修改后,编辑器就不会再冻结,同时也能严格限制40字符的输入上限啦!
内容的提问来源于stack exchange,提问作者HenryDev
相关产品推荐
相关产品推荐

