请上传宽度大于 1200px,高度大于 164px 的封面图片
    调整图片尺寸与位置
    滚轮可以放大缩小图片尺寸,按住图片拖动可调整位置,多余的会自动被裁剪掉
取消
郁金香(uid:95316)
职业资格认证:FCA-FineReport

数字输入屏蔽输入法

热度 8已有 961 次阅读2018-2-8 19:29 |个人分类:紫色伤逝

2018-02-08
在做年度统计图的时候,需要输入年份,在不使用年份插件的情况下只允许输入数字,自然而然的想到了数字框
报表控件提供了数字框控件,经实际测试,在键盘不开启中文输入法的情况下,只能输入数字,但是有一些符号是例外,比如单引号和英文逗号:


一旦开启中文输入法,则数字框完全失效。这同大多前端框架提供的数字框控件类似。由于ime-mode还不是W3C标准,
除了IE外其他浏览器都不支持这个属性,因此想要用控件加属性me-mode的方式来控制只允许输入数字就行不通了,还是得老老实实的写正则表达式。
在数字框montn_sta_input中添加编辑后事件如下:

编辑后事件无非就是取值然后替换最后赋值,但是实际上如第一个截图所示,并没有起到想要的效果,反而还报错。
考虑到replace()是不会错的,那么只有用来替换的值类型不对了,毕竟replace()只替换字符串。
控制台打印类型:

果然如我所料,打印出来结果显示数字框控件的值并不是string而是number,那么replace()报错也是必然的。
想要在中文输入法下不允许输入非数字,那么就把非数字替换掉,替换函数只能字符串替换,那么就不能用数字框控件。
于是还是换回文本框,在文本框里写编辑后事件,无论输入法是否开启,非数字都无法输入。

注意上述正则表达式是可以输入小数的并且没有限制精度。
事件代码如下:
var obj = this.options.form.getWidgetByName("month_sta_input1").getValue();  //month_sta_input1即是年度文本框
console.log("****obj="+typeof(obj));
console.log("****obj111="+obj);
obj = obj.replace(/[^\d.]/g,"");  //清除“数字”和“.”以外的字符
obj = obj.replace(/^\./g,"");  //验证第一个字符是数字而不是.
obj = obj.replace(/\.{2,}/g,"."); //只保留第一个. 清除多余的.
obj = obj.replace(".","$#$").replace(/\./g,"").replace("$#$",".");//保证.只出现一次,而不能出现两次以上
console.log("****obj222="+obj);
 this.options.form.getWidgetByName("month_sta_input1").setValue(obj); 



1

路过

鸡蛋
7

鲜花

握手

雷人

刚表态过的朋友 (8 人)

评论 (0 个评论)

返回顶部