ueditor编辑器在统计输入的字数时,输入图片时右下角显示的已输入字符数统计小了,经反复测试,发现问题如下:
选择图片后,编辑器会先生成一个<img>图片(使用了其内部图片)先做显示,测试路径如下:
<p><img title="正在上传..." class="loadingclass" id="loading_i3tjakb1" src="./ueditor1_4_3-utf8-jsp/themes/default/images/spacer.gif"/></p>
表单提交后,将返回的url再设置到刚才生成的<img>src中,使其从新显示,测试路径如下:
<p><img title="1418871056363016525.jpg" alt="C:Userslucky godDesktop\u7701委农工委办公自动化系统liuyi.jpg" src="/ueditor1_4_3-utf8-jsp/jsp/upload/image/20141218/1418871056363016525.jpg"/></p>
但问题来了:生成内部<img>时,触发了change事件,并统计已输入字符数,而修改了src值是不会触发change事件从新统计的,所以显示与得到的字符长度其实不同。
解决方法如下:打开/ueditor1_4_3-utf8-jsp/ueditor.all.js(当然引用哪个js就修改哪个),找到方法 initUploadBtn()中的回调方法callback(),修改如下
if(json.state == 'SUCCESS' && json.url) { loader = me.document.getElementById(loadingId); loader.setAttribute('src', link); loader.setAttribute('_src', link); loader.setAttribute('title', json.title || ''); loader.setAttribute('alt', json.original || ''); loader.removeAttribute('id'); domUtils.removeClasses(loader, 'loadingclass'); //2014-12-18 将编辑器的值重新设置一遍,触发change事件 me.setContent(me.getContent()); }
同时,如果拖动图片到编辑器也要进行处理:
找到sendAndInsertFile(file, editor)方法,修改其部分代码:
if (loader) { loader.setAttribute('src', link); loader.setAttribute('_src', link); loader.setAttribute('title', data.title || ''); loader.setAttribute('alt', data.original || ''); loader.removeAttribute('id'); domUtils.removeClasses(loader, 'loadingclass'); //2014-12-18 将编辑器的值重新设置一遍,触发change事件 me.setContent(me.getContent()); }
在这之前需要修改统计方法:(原文地址http://blog.csdn.net/woshishui6501/article/details/9216411)
getContentLength: function (ingoneHtml, tagNames) { var count = this.getContent(false,false,true).length; //注释掉的内容为 去除html标记后的内容数,实际入库是算上html标签和文字的 所以统计字数以getContents为准 /*if (ingoneHtml) { tagNames = (tagNames || []).concat([ 'hr', 'img', 'iframe']); count = this.getContentTxt().replace(/[\t\r\n]+/g, '').length; for (var i = 0, ci; ci = tagNames[i++];) { count += this.document.getElementsByTagName(ci).length; } }*/ return count; }