CKEditor 5 如何通过编程方式移除焦点(失焦)
解决CKEditor Classic 38.1.1的失焦问题
要让CKEditor真正失焦,你需要同时处理浏览器DOM焦点和CKEditor内部焦点跟踪状态,以下是可行的方法:
方法一:直接操作可编辑区域DOM并触发内部事件
// 获取编辑器可编辑区域的DOM元素 const editableDom = editor.editing.view.getDomRoot(); // 让DOM元素失焦 editableDom.blur(); // 触发CKEditor内部的blur事件,更新焦点跟踪器状态 editor.editing.view.document.fire('blur');
方法二:聚焦页面上的有效可聚焦元素
如果之前聚焦其他元素没生效,大概率是选的元素默认不可聚焦(比如普通<div>)。可以提前创建一个隐藏的可聚焦元素,在需要时聚焦它:
// 提前在页面中添加隐藏的可聚焦元素 const hiddenInput = document.createElement('input'); hiddenInput.style.position = 'absolute'; hiddenInput.style.opacity = '0'; hiddenInput.style.pointerEvents = 'none'; document.body.appendChild(hiddenInput); // 需要让编辑器失焦时,聚焦这个元素 hiddenInput.focus(); // 同步触发CKEditor的blur事件更新内部状态 editor.editing.view.document.fire('blur');
为什么之前的尝试无效?
- 直接修改
isFocused = false:这只是硬改属性值,但CKEditor内部的焦点跟踪逻辑依赖事件触发,不会主动监听这个属性的变化。 focusTracker.remove():这个方法只是停止跟踪焦点,不会主动清除已有的焦点状态,所以编辑器仍能接收用户输入。
按上述方法处理后,编辑器会真正失去焦点,用户再次点击进入时,你的checkIfShouldBeSticky函数就能正常触发,让粘性头部回到正确位置。
内容的提问来源于stack exchange,提问作者Felipe Issa
相关产品推荐
相关产品推荐

