• ext 扩展控件—moneyField


    /**
    *数字控件
    *带大写提示,和千分位
     **/
    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,  
                     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;
        }
    }); 
  • 相关阅读:
    Starting Tomcat v7.0 Server at localhost (2)hasencountered a problemServer Tomcat v7.0 Server at localhost (2)failed tostart
    如何获取系统当前时间
    解决TextEncoder 和 TextDecoder在IE下不兼容 vue 用iconv-lite插件代替 解决中文乱码问题
    vue 读取本地TXT GBK编码文件
    HTML常用标签和属性大全
    echarts中的个性化设计
    MySQL常用优化指南和思路
    微服务框架 Service Mesh
    spring boot actuator监控
    关于Swagger @ApiModel 返回内容注释不显示问题
  • 原文地址:https://www.cnblogs.com/glsqh/p/6185749.html
Copyright © 2020-2023  润新知