ckeditor全局事件未在内联编辑器上触发

时间:2017-05-24 00:18:24

标签: javascript ckeditor editor

关于如何保存内联内容,我一直在查看一些other questions。据此,我已经读过以下所有内容都应该可以检测焦点/模糊变化:

CKEDITOR.on("blur", function(e) {
    console.log("The editor named " + e.editor.name + " BLUR")
})
CKEDITOR.on("focus", function(e) {
    console.log("The editor named " + e.editor.name + " FOCUS")
})
CKEDITOR.on("instanceReady", function(evt) {
    var editor = evt.editor
    console.log("The editor named " + editor.name + " is now ready")

    editor.on("focus", function(e) {
        console.log("The editor named " + e.editor.name + " is now focused")
    })
    editor.on("blur", function(e) {
        console.log("The editor named " + e.editor.name + " is now focused")
    })
})

在将DIV元素添加到页面之前,我正在调用这些函数。 (虽然为了很好的衡量,我也尝试在之后调用这些我将DIV元素添加到页面中,而没有任何行为改变。)我已将DIV元素全部设置为contenteditable=true。当我点击它们中的任何一个时,我点击了一个闪烁的光标,我能够编辑DIV的内容。当我点击其他地方时,光标消失,表示焦点已丢失。

但是,我的上述所有函数都不会被调用。我应该如何检测其中一个内联编辑器何时获得并失去焦点?

我查看了API,我实际上并没有看到on是全局CKEDITOR单例的方法,所以我不确定这是怎么回事工作。但这种方法肯定存在。

更新:我尝试使用不同的ckeditor(https://cdnjs.cloudflare.com/ajax/libs/ckeditor/4.5.7/ckeditor.js而不是我为我的网站构建和下载的版本)和 版本,但仅适用于instanceReady事件。我在我的网站上使用与数字相同的版本,但我确定我没有使用所有相同的插件构建,因此我怀疑必须有插件的问题。

我也注意到即使我在我的div上有contenteditable=true,当我选择它并且它变为活动状态时,该元素实际上并没有改变任何东西,也就是说,CKEDITOR似乎没有替换它任何要编辑的东西。这可以解释为什么模糊和焦点事件没有触发,但为什么CKEDITOR没有控制?

1 个答案:

答案 0 :(得分:0)

在CKEditor加载后创建的元素不会自动使用它。必须调用inlineAll函数。该文档通过说"将具有contenteditable属性设置为true的DOM元素转换为CKEditor实例来描述此函数。"这对我来说很困惑,因为我认为在单击它之前我不希望该元素成为真正的CKEditor实例。但是,这并不是说编辑会话将被启动,只是说它将被CKEditor设置为可编辑。

如果存在任何其他CKEditor,则必须先将其删除,否则inlineAll将失败。因此,以下代码将删除任何存在,然后重新创建它们:

for (i in CKEDITOR.instances) { 
    CKEDITOR.instances[i].destroy()
}
CKEDITOR.inlineAll()