我有一个单独的html页面,上面有多个div
元素。每次用户点击div
时,它都会被动态替换为CKEditor
:
$('.editable').click(function() {
editor = CKEDITOR.replace(this);
});
现在,如果CKEditor实例失去焦点(模糊事件),我需要通过ajax将内容发布到单独的脚本(如果有更改)并销毁此实例:
$('.editable').click(function() {
editor = CKEDITOR.replace(this);
editor.on('blur', function(e)
{
if (e.editor.checkDirty())
// get data with e.editor.getData() and do some ajax magic
e.editor.destroy();
});
});
但是这个例子不起作用,因为我不知道为什么会在destory()
之前调用checkDirty()
。我怎样才能使这个工作?
答案 0 :(得分:0)
如果将destroy()
放在if()
声明中,该怎么办?如果没有任何改变,你可以有一个调用destroy的else子句。如果某些内容发生了变化,您可以在数据传输完成后在if子句中调用destroy()
。
$('.editable').click(function() {
editor = CKEDITOR.replace(this);
editor.on('blur', function(e)
{
if (e.editor.checkDirty()) {
// get data with e.editor.getData() and do some ajax magic
if ( dataTransferComplete ) {
e.editor.destroy();
}
} else {
e.editor.destroy();
}
});
});
或者您可以在调用destroy()
之前检查变量。在数据传输完成后将该变量设置为true,并在else子句中,在检查更改并传输任何更新数据之前,不会调用destroy()
。
$('.editable').click(function() {
editor = CKEDITOR.replace(this);
editor.on('blur', function(e)
{
var okToDestroy = false;
if (e.editor.checkDirty()) {
// get data with e.editor.getData() and do some ajax magic
okToDestroy = true;
} else {
okToDestroy = true;
}
if (okToDestroy )
e.editor.destroy();
});
});
这是一个大纲,我没有测试过代码,但是如果显示了这个概念。
好吧,
乔