/**
*数字控件
*带大写提示,和千分位
**/
Ext.define(appNameSpace+'.utils.MoneyField', {
extend : 'Ext.form.field.Text',
alias : 'widget.moneyfield',
initComponent : function() {
var me = this;
Ext.apply(Ext.form.field.VTypes, {
regexMoney: function(val, field) {
val = val.replace(/,/g,'');
if(isNaN(Number(val))){
if(field.negative_Text && val.indexOf("-")== 0 && val.replace(/-/g,"").length == val.length-1){
return true
}else{
return false;
}
}else{
return true;
}
},
regexMoneyText: "请输入数字,最大保留两位小数!"
});
me.on('keypress',function(t,e){
if(t.value.indexOf(".") != -1 && e.keyCode == 46){
e.stopEvent();
}
if((!t.negative_Text) && (44>e.keyCode && e.keyCode>58)){
e.stopEvent();
}else if((t.negative_Text) && (45>e.keyCode && e.keyCode>58)){
e.stopEvent();
} });
me.on("mouseover",function(){console.log("123")})
// Ext.apply(me,{});
this.callParent(arguments); // 调用你模块的initComponent函数
},
baseChars: '0123456789.-',
maskRe :new RegExp('[-0-9\.]'),
fieldStyle:"text-align:right;",
enableKeyEvents:true,
cursor:null,
vtype:"regexMoney",
getTip: function() {
var tip = this.tip;
if (!tip) {
tip = this.tip = Ext.widget('tooltip', {
target: this.el,
width: 420,
autoHide: false,
anchor: 'top',
//closable: true,
mouseOffset: [100, -2],
constrainPosition: false
});
tip.show();
}
return tip;
},
getValue: function(flag) {
var me = this,
val = me.rawToValue(me.processRawValue(me.getRawValue()));
// me.value = val;
if(!flag){
val = val.replace(/,/g,'');
}
return val;
},
onChange:function(newVal, oldVal){
/*if(value.replace(/,/g,'') == oldVal.replace(/,/g,'')){
if(newVal.length < oldVal.length){
for(var i=0;i<oldVal.length;i++){
if(newVal[i] != oldVal[i]){
this.setValue(this.toThousands(value));
}
}
}else{
return;
}
}*/
var t = this;
if(isNaN(Number(newVal.replace(/,/g,'')))){
if(t.negative_Text && newVal.indexOf("-")==0 && newVal.replace(/-/g,"").length == newVal.length-1){
return
}else{
this.setValue("");
return;
}
}
if(!t.isValid()){
return;
}
var el = this.inputEl.dom;
/**数字大写**/
if(newVal==oldVal){
return;
}
var decimal = "";
var value = newVal;
/*if(newVal.indexOf(".") != -1){
if(newVal.substring(value.indexOf(".")+1).indexOf(".") != -1){
this.setValue(oldVal);
return;
}
}*/
if(newVal.indexOf(",") != -1){
value = newVal.replace(/,/g,'');
if(newVal.replace(/,/g,'') == oldVal.replace(/,/g,'')){
return;
}
} var tip = this.getTip();
t.setValue(t.getValue(true).replace(/\s/g, ""));
t.setValue(t.getValue(true).replace(/。/g, "."));
if(t.value != null && t.value != ''){
tip.setDisabled(false);
tip.setTitle(atoc(value));
tip.show();
}else{
tip.setDisabled(true);
tip.hide();
}
/**千分位**/
if(newVal == ""){
return;
} if(value.indexOf(".") != -1){
var valLength = value.substring(value.indexOf(".")).length;
if(valLength == 1){
decimal = ".";
}else{
decimal = value.substring(value.indexOf("."));
}
value = value.substring("0",value.indexOf("."));
}
var n_ = "";
if(this.negative_Text && value.indexOf("-")==0){
value = value.replace(/-/g,'');
n_ = "-"
}
this.setValue(n_ + this.toThousands(value,newVal)+decimal);
el.setSelectionRange(this.cursor,this.cursor);
return;
},
onBlur:function(e){
var me = this;
if(!me.isValid()){
return;
}
var val = me.getValue(true);
/**数字大写**/
var tip = this.getTip();
tip.setDisabled(true);
tip.hide();
/**小数位**/
var value = val.replace(/,/g,'');
if(val.indexOf(".") != -1){
value = parseFloat(value).toFixed(2);
var sVal = val.substring(0,val.indexOf("."));
var eVal = value.substring(value.indexOf("."));
var n_ = "";
if(this.negative_Text && value.indexOf("-")==0){
value = value.replace(/-/g,'');
n_ = "-"
}
me.setValue(n_ + this.toThousands(sVal)+eVal);
}else{
if(val != ""){
me.setValue(this.toThousands(value));
}
}
return;
},
onFocus:function(e){
var me = this;
var el = this.inputEl.dom;
el.setAttribute("onpaste","return false");
var val = me.getValue(true);
var newVal = val;
/**数字大写**/
var t = this;
if(!t.isValid()){
return;
}
var tip = this.getTip();
t.newVal = t.value;
t.setValue(t.getValue(true).replace(/\s/g, ""));
t.setValue(t.getValue(true).replace(/。/g, "."));
if(t.value != null && t.value != ''){
tip.setDisabled(false);
tip.setTitle(atoc(newVal));
tip.show();
}else{
tip.setDisabled(true);
tip.hide();
}
me.getValue(true);
return;
},
toThousands:function(num,val) {
var el = this.inputEl.dom;
var value = this.value;
if(num.indexOf(",") != -1){
num = num.replace(/,/g,'');
}
var str = el.selectionStart;
var num = (num || 0).toString(), result = '';
while (num.length > 3) {
result = ',' + num.slice(-3) + result;
num = num.slice(0, num.length - 3);
}
if (num) { result = num + result; }
//光标在最后的时候
if(str == value.length && value.indexOf(".")==-1){
this.cursor = result.length;
}else if((result.length - value.length == 1 && value.indexOf(".")==-1)||(result.length - value.substring(0,value.indexOf(".")).length==1 && value.indexOf(".") !=-1)){
this.cursor = str+1;
}else if(result.length - value.length == -1 && value.indexOf(".")==-1||(result.length - value.substring(0,value.indexOf(".")).length==-1 && value.indexOf(".") !=-1)){
this.cursor = str-1;
}else if(result.length == value.length && value.indexOf(".")==-1){
this.cursor = str;
}else if(str == value.length && value.indexOf(".") !=-1){
this.cursor = value.length;
}else if(value.indexOf(".") !=-1 ){
this.cursor = str;
}
if(this.negative_Text && value.indexOf("-")==0){
this.cursor = this.cursor+1
}
/*if(str == val.length &&val.indexOf(".") == -1){
this.cursor = result.length;
}else if(str == val.length &&val.indexOf(".") != -1){
var num = val.substring(val.indexOf(".")).length;
this.cursor = result.length + num;
}else if(str == this.value.length){
this.cursor = str;
}*/
return result;
}
});

ext 扩展控件—moneyField的更多相关文章

  1. 多年前写的文本框扩展控件(有ValueChanging事件等),已放github

    本文版权归mephisto和博客园共有,欢迎转载,但须保留此段声明,并给出原文链接,谢谢合作. 文章是哥(mephisto)写的,SourceLink 阅读目录 介绍 起因 代码 使用 GitHub ...

  2. JavaFX的扩展控件库ControlsFX介绍

    声明:   本博客文章原创类别的均为个人原创,版权所有.转载请注明出处: http://blog.csdn.net/ml3947,另外本人的个人博客:http://www.wjfxgame.com. ...

  3. WPF自定义控件(三)の扩展控件

    扩展控件,顾名思义就是对已有的控件进行扩展,一般继承于已有的原生控件,不排除继承于自定义的控件,不过这样做意义不大,因为既然都自定义了,为什么不一步到位呢,有些不同的需求也可以通过此来完成,不过类似于 ...

  4. 2.C#Panel扩展控件

    1.解决方案下添加新建项目新建类库 2. 在项目下添加新建项选择新建组件类 3.先引用,然后导入两个命名空间 4.因为是扩展控件,把继承自Component改成继承自Panel using Syste ...

  5. 验证控件插图扩展控件ValidatorCalloutExtender(用于扩展验证控件)和TextBoxWatermarkExtender

    <asp:ScriptManager ID="ScriptManager1" runat="server">  </asp:ScriptMan ...

  6. Ext.net控件调整后台事件、方法论

    一.以ext.net的button为例调用后台事件: 前台代码: <ext:Button ID="Button1" runat="server" Text ...

  7. Ext表格控件

    表格控件其实也就是帮我们完成了数据的填充工作而已,具体的数据源.要显示的列,列的定制.数据源中的哪条数据显示在哪个列中等属性还是需要我们自己手动配置的,所以我们分下面几步来完成网格控件的数据绑定: 1 ...

  8. IExtenderProvider,c#组件扩展控件属性

    [ProvideProperty("IsEnabled", typeof(LayoutControlItem)), ToolboxItemFilter("System.W ...

  9. QGEditors.WinForms WinForms下使用的部分扩展控件

    Nuget: https://www.nuget.org/packages/QGEditors.WinForms/ PM> Install-Package QGEditors.WinForms ...

随机推荐

  1. Nginx+tomcat负载均衡并动静态分离

    Nginx使用正则表达式配置location,指定某些后缀的文件直接从文件路径中找(如*.jpg直接去C:/XX/XX/XX/img下找),其他的请求转发给tomcat 同时可以配置多个tomcat ...

  2. Hyperic Agent 安装配置报 - No token file found, waiting for Agent to initialize

    本人经过跟VMWare 支持的多方努力,问题终于得到解决,方案如下: * Stop the agent Windows service. * Make sure all the agent proce ...

  3. CSS 列表 你知道吗

    CSS 列表属性允许你放置.改变列表项标志,或者将图像作为列表项标志.CSS 列表从某种意义上讲,不是描述性的文本的任何内容都可以认为是列表.人口普查.太阳系.家谱.参观菜单,甚至你的所有朋友都可以表 ...

  4. java方法的重载

    java方法的重载 public class Person1 {    private String name; //姓名    private int age;      //年龄    priva ...

  5. asp.net中利用session对象传递、共享数据[session用法]

    下面介绍Asp.net中利用session对象传递.共享数据用法: 1.传递值: 首先定义将一个文本值或单独一个值赋予session,如下: session[“name”]=textbox1.text ...

  6. HTML5到底能给企业带来些什么?

    一.改变企业网络广告的模式与分布 广告是企业网络营销的主要方式之一.十几年来,无论是展示还是互动,基本被Adobe Flash所主宰.然而,HTML5网页的多媒体特性.三维.图形及特效,超炫的浏览体验 ...

  7. 使用Parse内付费服务出现的Error Domain=Parse Code=146 "The operation couldn’t be completed. (Parse error 146.)

    因为开发一个应用有个内付费去广告功能,介于苹果官方提供的方法没用过,感觉有些复杂,于是选用了第三方组件Parse来解决这个问题,简单易操作: Parse简化苹果官方内付费问题,使用方法分厂简单只有两个 ...

  8. 管理http服务的脚本

    因为老是须要又一次安装系统,重一次都要又一次设置http服务的启动脚本.麻烦,所以这一次就把脚本备份出来. httpd for Ubuntu system: nginx + php-fpm #! /b ...

  9. 处理json中影响解析的多余引号

    在xml中,敏感字符是尖括号,在json中,敏感字符是引号,上文中我们介绍了如何处理xml中的敏感字符,本文说说如何处理json中的敏感字符. 思路与上文相同,不再赘述.直接上代码: json–> ...

  10. Android图片异步加载之Android-Universal-Image-Loader

    将近一个月没有更新博客了,由于这段时间以来准备毕业论文等各种事务缠身,一直没有时间和精力沉下来继续学习和整理一些东西.最近刚刚恢复到正轨,正好这两天看了下Android上关于图片异步加载的开源项目,就 ...