checkDirty总是返回true

时间:2015-03-12 17:31:10

标签: ckeditor ckeditor4.x

每当我调用checkDirty()时,我总是变得真实。运行下面的示例,只需单击destroy按钮。

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

    });
});

1 个答案:

答案 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;

};