ckeditor getData()在源模式下返回过时数据(最后一次更改丢失)

时间:2015-10-21 13:48:11

标签: javascript ckeditor

尝试在http://ckeditor.com/demo上输入模式来调试使用 控制台中的CKEDITOR.instances["editor1"].on("key", function(e) {console.log("change: " + e.editor.getData())})

我总是在控制台中看到一个字符少,所以如果我输入abc,我会看到ab

注意:因https://dev.ckeditor.com/ticket/12031Guidelines而使用关键事件 和 How to detect CKEditor source mode on change event

2 个答案:

答案 0 :(得分:2)

在我的分析中写下详细的答案。

正如我之前所说,即使在将关键笔划记录为编辑器中文本的一部分之前,也会获取getData()。这就是为什么你看到以前的数据(按键之前的数据)

由于暴露了极少的代码,我无法帮助您解决当前的情况。我不确定你是如何使用它的,以及它们主张的是什么。

但是,我会在我的分析中发布 - 我创建了一个waitfunc(),它只为5secs设置了超时。我这样做是为了观察密钥是先记录在编辑器中还是首先记录数据。

function waitfunc() {
    setTimeout(function() {
        console.log("wait")
    }, 5000)
}

CKEDITOR.instances["editor1"].on("key", function(e) {
    waitfunc();
    console.log("change: " + e.editor.getData());
    waitfunc();
})

我看到数据首先被采用。然后添加新的按键作为编辑器的一部分。我在段落的末尾添加了“c”。

Both timeouts happen after the data is grabbed

所以,请看一下代码(代码行的顺序或其他)。如果可能,分享更多代码,我可以提供更多帮助。

希望它有所帮助。

答案 1 :(得分:0)

我的理解是"key"事件与javascript中的onkeydown类似,因此查看编辑器关键按下的内容意味着在添加字符之前查看它。您应该查看"keyup"事件,该事件在内容被更改后触发。很像setTimeout解决方案,但更多一点"正确"。

请在此处查看very similar question和代码示例