LayTp交流一群:843093362 LayTp交流一群 发表新帖

2.0.5【优化】为了避免因编辑器未初始化完成就点击提交表单按钮而造成JS错误,导致表单提交失败的问题

【更新公告】 0
JunStar
2022-03-07 12:12:06

如果,表单页面存在编辑器,那么在提交表单的js部分会有如下代码,获取编辑器的内容组合成提交表单字段

  1. data = facade.setEditorField(data);

今天在写公司项目时,发现一个问题,当一个页面编辑器较多,初始化需要1-2秒时,在编辑器未初始化完成就点击提交表单按钮,会有js错误,导致表单提交失败。
所以修改了方法facade.setEditorField

  1. setEditorField: function(data){
  2. let obj = $(".editor");
  3. if(obj.length>0){
  4. layui.each(obj, function (key, item) {
  5. let id = $(item).data('id');
  6. let type = $(item).data('type');
  7. try{
  8. data.field[id] = $(item)[0].contentWindow.getEditorContent();//这一句不能省略,否则第一次提交表单时会获取不到值
  9. }catch (e) {
  10. throw new Error('ueditor编辑器未初始化完成,请勿提交表单');
  11. }
  12. // meditor编辑器有两个内容,
  13. // 一个是Markdown语法的内容,一个是html标记的内容,
  14. // Markdown语法的内容会存入字段,如果需要存储html的内容,自行在控制器中加入代码存储
  15. if(type === "meditor"){
  16. try{
  17. data.field[id+"_html"] = $(item)[0].contentWindow.getHtmlContent();//这一句不能省略,否则第一次提交表单时会获取不到值
  18. }catch (e) {
  19. throw new Error('meditor编辑器未初始化完成,请勿提交表单');
  20. }
  21. }
  22. });
  23. }
  24. return data;
  25. },

编辑器未初始化完成时,抛出异常。

在所有添加和编辑页面获取编辑器内容的代码就要捕获异常

  1. try{
  2. data = facade.setEditorField(data);
  3. }catch (e) {
  4. facade.error(e);
  5. return false;
  6. }

这个修改牵涉到框架中含有编辑器的所有静态页面,包括框架核心,各插件。
特在此记录一下。

回帖