浏览 1977 次 / [ 天下网闻 ] Discuz 3.3/3.4发帖编辑器回车两次及换行提交后无效等问题解决方法
  • 发布时间 2019-04-25 14:02
  • 具体症状:

    无论是DZ官方默认模板还是其他模板,在初次编辑帖子的时候,已经排好段落换行的,发布后经常出现换行消失,比如回车一次和两次的,提交后会发现换行有可能生效,更可能没有变化,
    尤其是图文排版,文字和图片直接的空行很难控制,经常要反复编辑两三次,费时费力。

    这个问题已经困扰了几年,由于水平问题一直没有勇气去解决,以下解决方法参考sunguide的方法,非常简单的解决了,在此感谢!


    解决方法:

    找到static/js/bbcode.js,搜索if((allowhtml && fetchCheckbox('htmlon')) || trim(str) == '') {,在这行下方大约315行的下方(Discuz X3.4)加入以下代码:

    1. //fix first enter cannot start new line
    2. var divPos = strpos(str,"<div>");
    3. if(divPos > 0 ){
    4.     if(divPos > 4 && str.substr(divPos - 4,4) == '</p>'){}
    5.     else{
    6.         str = str.substr(0,divPos) + '<br>'+ str.substr(divPos);
    7.     }
    8. }
    9. //end
    复制代码
    本段修改前后对比如下:

    修改前:

    1. if((allowhtml && fetchCheckbox('htmlon')) || trim(str) == '') {
    2.                 for(i in EXTRAFUNC['html2bbcode']) {
    3.                         EXTRASTR = str;
    4.                         try {
    5.                                 eval('str = ' + EXTRAFUNC['html2bbcode'][i] + '()');
    6.                         } catch(e) {}
    7.                 }
    8.                 str = str.replace(/<img[^>]+smilieid=(["']?)(\d+)(\1)[^>]*>/ig, function($1, $2, $3) {return smileycode($3);});
    9.                 str = str.replace(/<img([^>]*aid=[^>]*)>/ig, function($1, $2) {return imgtag($2);});
    10.                 return str;
    11.         }
    复制代码
    修改后:

    1. if((allowhtml && fetchCheckbox('htmlon')) || trim(str) == '') {
    2.                 for(i in EXTRAFUNC['html2bbcode']) {
    3.                         EXTRASTR = str;
    4.                         try {
    5.                                 eval('str = ' + EXTRAFUNC['html2bbcode'][i] + '()');
    6.                         } catch(e) {}
    7.                 }
    8.                 str = str.replace(/<img[^>]+smilieid=(["']?)(\d+)(\1)[^>]*>/ig, function($1, $2, $3) {return smileycode($3);});
    9.                 str = str.replace(/<img([^>]*aid=[^>]*)>/ig, function($1, $2) {return imgtag($2);});
    10.                 return str;
    11.         }
    12.         
    13. //fix first enter cannot start new line
    14. var divPos = strpos(str,"<div>");
    15. if(divPos > 0 ){
    16.     if(divPos > 4 && str.substr(divPos - 4,4) == '</p>'){}
    17.     else{
    18.         str = str.substr(0,divPos) + '<br>'+ str.substr(divPos);
    19.     }
    20. }
    21. //end
    复制代码

    方法出处:https://segmentfault.com/a/1190000009142976  再次感谢!