做了一段的ExtJs,总是发现很多时候在每个浏览器下面都会有这样或者那样的错误.或者格式异常,我现在还没有牛逼到直接改所谓的样式,不过可以想别的办法.比如在IE和Chorme下,数据单元格内容如果超过长度限制的话,会自动截取适当长度然后后面补 ... ,但是FireFox就是个奇葩,这货就是无限的延长啊啊啊啊.看着都揪心.用人类的话就是这货实诚.
1 /** 2 * 2014-9-16 12:55 3 * zhaolf 4 * 5 * @火狐浏览器 下需要 其余浏览器支持自动换行 FF下呈现Grid单元格内容时,如果内容超长,则换行显示 * 只需在单元格后添加下面属性 6 * renderer: renderAutoNewLine 7 */ 8 var renderAutoNewLine = function(v) { 9 return "<div style='word-wrap:break-word;word-break: break-all;' mce_style='word-wrap:break-word;word-break: break-all;'>" + v + "</div>"; 10 }
用的时候只需要在相应字段下加上 renderer: renderAutoNewLine 就万事大吉了
//我是贱贱的分割线*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*--*-*-*-*我还是分割线,可是我不贱//
有时候需要textarea,但是后台限制字数怎么办?提交到后台验证长度再返回消息?这样多不友好 ^. ^ 还不如直接判断来的爽快.都在前台做好,符合格式了再提交.一遍过,省的那么麻烦.要是中间出什么差错多不好.
/** ************************************************ */ /** * @author zhaolf * @history 2014/11/20 限制textarea输入框文字长度,过长自动截取字符串 */ // String.prototype.len = function() { // return this.replace(/[^\x00-\xff]/g, "rr").length; // } String.prototype.checkMaxLength = function(lenTemp) { // var len = 0; // for (var i = 0; i < this.length; i++) { // if (this.charCodeAt(i) > 255) { // len += 2; // } else { // len += 2; // }; // } // var r = /[^\x00-\xff]/g; if (this.length <= lenTemp) return this; //var m = Math.floor(lenTemp / 2); for (var i = lenTemp; i < this.length; i++) { if (this.substr(0, i).length >= lenTemp) { hs.MessageHelper.info({ msg : '注意:文字长度不能超过' + lenTemp + '个字,系统将自动去掉超出文字' }); return this.substr(0, i); } } return this; }; /** ****************************************************** */
注释什么的是计算汉字和英文差异的,起先是想按照字符算的~但是项目里需求是发短信,这要是按照字符算,容易出现半个字符.所以按照整字来吧~
1 xtype : 'textarea', 2 fieldLabel : '下发地描述', 3 name : 'areamemo', 4 height : '35', 5 anchor : '95.5%', 6 listeners : { 7 change : { 8 fn : function(o) { 9 o = o.getValue().checkMaxLength(100);//设置最大字数 为100 10 Ext.getCmp('XZForm').getForm().setValues({//获取form设置回填的值 11 areamemo : o 12 }); 13 } 14 } 15 }
这么一来就可以实现自动截取了,如果不是最后一个填空的话,可以设置change为onblur. 不过这个关系不大啦~
叶落星辰 W