当我的用户在默认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在整个文档中找到满足感......
你将如何直接解决这个问题?
答案 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