关于如何保存内联内容,我一直在查看一些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没有控制?
答案 0 :(得分:0)
在CKEditor加载后创建的元素不会自动使用它。必须调用inlineAll
函数。该文档通过说"将具有contenteditable属性设置为true的DOM元素转换为CKEditor实例来描述此函数。"这对我来说很困惑,因为我认为在单击它之前我不希望该元素成为真正的CKEditor实例。但是,这并不是说编辑会话将被启动,只是说它将被CKEditor设置为可编辑。
如果存在任何其他CKEditor,则必须先将其删除,否则inlineAll将失败。因此,以下代码将删除任何存在,然后重新创建它们:
for (i in CKEDITOR.instances) {
CKEDITOR.instances[i].destroy()
}
CKEDITOR.inlineAll()