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

如何关闭MyBB论坛中SCEditor的光标自动聚焦功能?

解决MyBB中SCEditor页面加载自动聚焦的问题

问题描述

页面加载时SCEditor会自动获取焦点,存在多个编辑器时会直接跳转到最后一个,导致页面跳过其他输入区域。已尝试以下方法但均无效:

  • 在codebuttons模板的MyBBEditor = $("#{$bind}").sceditor("instance");下方添加sceditor("instance").focus(false)
  • 在codebuttons模板的autoUpdate: true,下方添加autofocus: false,
  • 在codebuttons模板的MyBBEditor = $("#{$bind}").sceditor("instance");下方添加MyBBEditor.autofocus(false);及MyBBEditor.autofocusEnd(false);

官方支持渠道(MyBB论坛、SCEditor邮件)均未得到回复。

可行解决方案

1. 延迟执行失焦操作

编辑器的自动聚焦可能是异步触发的,延迟短时间后执行失焦可以覆盖这个行为:
在codebuttons模板中编辑器初始化代码后添加:

setTimeout(() => {
    MyBBEditor.blur();
}, 100);

可根据实际情况调整延迟时间(50-200ms区间均可),确保能覆盖编辑器的自动聚焦逻辑。

2. 强制锁定autofocus配置并检查初始化逻辑

确保在编辑器配置中autofocus被明确设置为false,同时检查是否存在其他触发聚焦的配置项:
在codebuttons模板的编辑器配置对象里(sceditor初始化参数部分),确认添加:

autofocus: false,
focusOnInit: false // 部分版本可能存在该配置,一并关闭

若之前已添加autofocus: false但无效,检查是否有其他代码在初始化后主动调用focus()方法,找到后注释或删除即可。

3. 临时阻止聚焦事件

通过DOM事件拦截初始聚焦行为,仅在页面加载阶段生效,不影响后续正常使用:
在codebuttons模板中添加:

// 临时阻止编辑器初始聚焦
const blockFocus = function(e) {
    e.preventDefault();
    $(this).blur();
    // 只拦截一次,之后恢复正常聚焦功能
    $(this).off('focus', blockFocus);
};
$("#{$bind}").on('focus', blockFocus);

4. 修改SCEditor核心代码(迫不得已时使用)

如果以上方法都无效,直接修改编辑器核心文件:
找到SCEditor的源文件(如jquery.sceditor.js),搜索包含autofocus的代码块,通常类似:

if (this.opts.autofocus) {
    this.focus();
}

将这段代码注释掉,或直接修改条件为if (false),彻底关闭自动聚焦逻辑。注意修改核心文件后,后续升级编辑器时需要重新调整。

内容的提问来源于stack exchange,提问作者c.widow

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.26 04:28:04