每当我调用checkDirty()时,我总是变得真实。运行下面的示例,只需单击destroy按钮。
$(document).ready(function() {
CKEDITOR.config.autoUpdateElement = false;
CKEDITOR.on('contentDom', function (event) {
event.editor.resetDirty();
});
CKEDITOR.on('instanceReady', function (event) {
event.editor.on('contentDomUnload', function (destroyevent) {
alert('isdirty: ' + destroyevent.editor.checkDirty());
});
});
$("#item_ckeditor").ckeditor();
$("#item_docompare").on("click", function (event) {
var $textarea = $("#item_ckeditor"),
editor = $textarea.ckeditorGet();
editor.destroy();
});
});
答案 0 :(得分:0)
<强>更新强>
我有一个新的isdirty函数here,如果用户更改了CKEditor中的内容,它将返回一个准确的值。这并不总是返回true,并且仍然可以使用自动排序的元素属性。
var isdirty = function(ckeditor) {
return ckeditor.initialdata !== ckeditor.getData();
};
CKEDITOR.on('instanceReady', function (event) {
event.editor.initialdata = event.editor.getData();
});
<强>原始强>
看起来CKEditor会自动在内容中添加空格,因此checkDirty()始终返回true。我编写了自己的函数,忽略大小写并修剪自动添加的间距here。
这非常合适,除非您将allowedContent设置为true并禁用ACF。新问题是CKEditor对元素的属性进行排序,导致检查修改后的内容无法正常工作。
我记录了一个单独的问题here,以了解如何禁用元素属性的排序。
var isdirty = function(ckeditor) {
var originalcontent = $.trim(ckeditor._.previousValue.toLowerCase());
newcontent = $.trim(ckeditor.getSnapshot().toLowerCase());
return originalcontent !== newcontent;
};