0

每当我调用 checkDirty() 时,我总是会变得真实。运行下面的示例,然后单击销毁按钮。

jsfiddle

$(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();

    });
});
4

1 回答 1

0

更新

我在这里有一个新的 isdirty 函数,如果用户更改了 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。我编写了自己的函数,它忽略大小写并修剪此处自动添加的间距。

这工作得非常好,除非您将 allowedContent 设置为 true 并禁用 ACF。新问题是 CKEditor 对元素上的属性进行排序,导致检查修改的内容无法正常工作。

我在这里记录了一个单独的问题,以了解如何禁用元素属性的排序。

 var isdirty = function(ckeditor) {
     var originalcontent = $.trim(ckeditor._.previousValue.toLowerCase());
         newcontent = $.trim(ckeditor.getSnapshot().toLowerCase());
     return originalcontent !== newcontent;

};
于 2015-03-12T20:12:27.863 回答