You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

求助:将CKEditor在Bootstrap v3模态框的修复适配到Bootstrap v4

解决Bootstrap v4模态框与CKEditor的焦点冲突问题

我之前也碰到过这个棘手的问题——Bootstrap v4把v3里的enforceFocus方法重命名成了_enforceFocus,导致原来适配v3的修复代码直接失效,模态框总是抢CKEditor的焦点。下面是我亲测有效的修复方案:

核心思路

我们需要重写Bootstrap模态框的_enforceFocus方法,让它在检测到焦点处于CKEditor的元素内时,跳过强制聚焦到模态框的逻辑,这样就能让CKEditor正常获取焦点了。

修复代码

把这段代码放在Bootstrap和CKEditor都加载完成之后执行(比如DOM就绪的回调里):

// 先保存Bootstrap模态框原本的_enforceFocus方法
const originalEnforceFocus = $.fn.modal.Constructor.prototype._enforceFocus;

// 重写_enforceFocus方法
$.fn.modal.Constructor.prototype._enforceFocus = function() {
    // 获取当前页面的焦点元素
    const activeElement = document.activeElement;
    
    // 检查焦点元素是否属于CKEditor的容器(.cke是CKEditor的核心容器类)
    if (activeElement && activeElement.closest('.cke')) {
        return; // 如果是CKEditor的元素,直接返回,不执行强制聚焦
    }
    
    // 否则调用原本的_enforceFocus方法,保留Bootstrap的默认行为
    originalEnforceFocus.call(this);
};

使用说明

  1. 确保这段代码在jQuery、Bootstrap JS、CKEditor都加载完成后运行,比如放在$(document).ready()回调里:
$(document).ready(function() {
    // 上面的修复代码放在这里
});
  1. 如果你用的是原生JS而非jQuery,也可以调整代码实现:
document.addEventListener('DOMContentLoaded', function() {
    const originalEnforceFocus = bootstrap.Modal.prototype._enforceFocus;
    bootstrap.Modal.prototype._enforceFocus = function() {
        const activeElement = document.activeElement;
        if (activeElement && activeElement.closest('.cke')) {
            return;
        }
        originalEnforceFocus.call(this);
    };
});

这样修改后,模态框就不会再干扰CKEditor的焦点了,你可以正常在模态框里使用CKEditor编辑内容啦。

内容的提问来源于stack exchange,提问作者esviko

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.21 04:25:42