即使在提交更改时,CKEditor也会在退出之前始终发出警报

时间:2014-02-07 15:33:15

标签: javascript forms ckeditor

我正在使用checkdirty函数在退出之前检查我的ckeditor是否有任何更改。它工作正常,但即使我提交更改,警报也会出现。我将更改哪些代码以及从何处获取此提交按钮以跳过检查并保存更改?

这是我的代码。

for ( var name in CKEDITOR.instances ) {
    if(submit_it)
        return false;

    if ( CKEDITOR.instances[ name ].checkDirty() ) {
        return evt.returnValue = "You will lose the changes made in the editor.";
    }
}
}

var submit_it = false;

if ( window.addEventListener )
    window.addEventListener( "beforeunload", beforeUnload, false );
else
    window.attachEvent( "onbeforeunload", beforeUnload );

这是我头脑中的javascript代码。

var warn_on_leave = false; 

CKEDITOR.on('currentInstance', function() {                
    try { 
        CKEDITOR.currentInstance.on('key', function() {        
            warn_on_leave = true; 
        }); 
    } catch (err) { }                                        
});

$(document.activeElement).submit(function() {   
    warn_on_leave = false; 
});

$(window).bind('beforeunload', function() { 
    if(warn_on_leave) { 
        return 'Attention: Your text has not been saved!'; 
    } 
}); 

这是我的提交按钮:

<input type="image" src="button_update.gif" border="0" alt="Update" name="udpate" title=" Update ">

1 个答案:

答案 0 :(得分:0)

我遇到了类似的问题,在谷歌搜索了2个小时之后,我想出了一个解决方案,在执行save命令之前,我要做的就是注册一个事件:

var saved = false;

CKEDITOR.replace('#myTextArea', options);

CKEDITOR.plugins.registered['save'] = {
    init: function (editor) {
        editor.on( 'beforeCommandExec', function(event)
        {
            if (event.data.name === 'save') {
                saved = true;
            }
        });
    }
};

$(window).on('beforeunload', function () {
    if (saved === false) {
        if (CKEDITOR.currentInstance.checkDirty() === true) {
            return 'You have some unsaved changes on this page, are you sure you want to leave?';
        }
    }
});

尽管这是一个非常古老的问题,但我认为我的回答会有所帮助。