CKeditor 4:如何检查是否采用内联编辑模式而不是请假

时间:2013-12-10 14:16:15

标签: jquery ckeditor

当我的用户在默认CKEditor中输入文本并且意外关闭窗口时,我会发出警告。但是,在CKEditor的新inline editing mode中进行编辑时,也会启用此功能。

我需要检查我们是否处于“内联模式”以不输出警告。在docs我找不到isInline()方法或类似方法,所以我想我们需要一个解决方法?

我尝试检查仅为内联编辑添加的保存按钮$('.cke_button__savebtn').length==0)

if(typeof(CKEDITOR) !== 'undefined' && $('.cke_button__savebtn').length==0) {
    var warn_on_leave = false;
    CKEDITOR.on('currentInstance', function() {
        try {
            CKEDITOR.currentInstance.on('key', function() {
                warn_on_leave = true;
            });
        } catch (err) { }
    });
    $("input:submit").click( function() {
        warn_on_leave = false;
        return true;
    });
    // show popup
    $(window).bind('beforeunload', function() {
        if(warn_on_leave) {
            return 'Your text was not saved. All your text gets lost.';
        }
    });

}

但奇怪的是,它并不是一直有效。

然后我认为如果contenteditable存在,我可以使用JQuery检查:<div id="editable" contenteditable="true">但我的ID对于编辑器字段不是常量。嗯..我可以使用Jquery在整个文档中找到满足感......

你将如何直接解决这个问题?

1 个答案:

答案 0 :(得分:1)

您可以使用isInline() method

您可以枚举使用CKEDITOR.instances

实例化的编辑器
CKEDITORCUSTOM.closeWarning = function () {
    for (var i in CKEDITOR.instances) {     
        if (CKEDITOR.instances[i].editable().isInline() === false) {            
            return 'Your text was not saved. All your text gets lost.';
        }
    }
    //return null; do not return anything is better becouse IE become mad
};
window.onbeforeunload = CKEDITORCUSTOM.closeWarning;

建议:如果您需要获取未保存的更改,则应使用在CKEditor 4.2为插件之前的change event

http://ckeditor.com/addon/onchange

嵌入了

和4.2:

http://ckeditor.com/forums/CKEditor/onChange-event-included-in-CKEditor-4.2