如果,表单页面存在编辑器,那么在提交表单的js部分会有如下代码,获取编辑器的内容组合成提交表单字段
data = facade.setEditorField(data);
今天在写公司项目时,发现一个问题,当一个页面编辑器较多,初始化需要1-2秒时,在编辑器未初始化完成就点击提交表单按钮,会有js错误,导致表单提交失败。
所以修改了方法facade.setEditorField
setEditorField: function(data){
let obj = $(".editor");
if(obj.length>0){
layui.each(obj, function (key, item) {
let id = $(item).data('id');
let type = $(item).data('type');
try{
data.field[id] = $(item)[0].contentWindow.getEditorContent();//这一句不能省略,否则第一次提交表单时会获取不到值
}catch (e) {
throw new Error('ueditor编辑器未初始化完成,请勿提交表单');
}
// meditor编辑器有两个内容,
// 一个是Markdown语法的内容,一个是html标记的内容,
// Markdown语法的内容会存入字段,如果需要存储html的内容,自行在控制器中加入代码存储
if(type === "meditor"){
try{
data.field[id+"_html"] = $(item)[0].contentWindow.getHtmlContent();//这一句不能省略,否则第一次提交表单时会获取不到值
}catch (e) {
throw new Error('meditor编辑器未初始化完成,请勿提交表单');
}
}
});
}
return data;
},
编辑器未初始化完成时,抛出异常。
在所有添加和编辑页面获取编辑器内容的代码就要捕获异常
try{
data = facade.setEditorField(data);
}catch (e) {
facade.error(e);
return false;
}
这个修改牵涉到框架中含有编辑器的所有静态页面,包括框架核心,各插件。
特在此记录一下。