`
xmy20051643
  • 浏览: 39683 次
  • 性别: Icon_minigender_1
  • 来自: 成都
社区版块
存档分类
最新评论

extjs 5 textfield 金额控件扩展

 
阅读更多

1.可自已设置金额正、负是分别用绿、红色表字体;

2.显示带币种符号,提交时不会为数值提交;

3.extjs 5.10测试

 

/**
 * extjs form money field.
 *
 *
 * @author <a href='mailto:xiaomingyang@aksl.com.cn'>xiaomingyang</a> 2016年3月2日,15时6分
 * @version v0.1
 * @since 5.0
 */
Ext.define('Ext.form.field.MoneyField', {
    xtype : 'money',
    requires: [
    ],
    alias : 'widget.MoneyField',
    extend : 'Ext.form.field.Text',
    alternateClassName: 'Ext.form.field.MoneyField',

    fieldLabel : '',

    fieldStyle : {
        "text-align":"right"
    },

    minValue: Number.NEGATIVE_INFINITY,

    maxValue: Number.MAX_VALUE,

    minText : "金额最小为 {0}",

    maxText : "金额最大为 {0}",

    nanText : "{0} 不是一个有效金额",

    /**
     * 默认币种标志
     */
    moneyCharactor : '¥',

    /**
     * 金额格式
     */
    moneyFormatter : '0,000.00',

    /**
     * 是否使用红绿字提示
     */
    moneyColored : true,

    /**
     * 小数允许
     */
    allowDecimals : true,

    /**
     * 负数允许
     */
    allowNegative : true,

    baseChars : "0123456789",

    decimalSeparator : '.',

    /**
     * 保留小数位数
     */
    decimalPrecision : 2,

    value : 0,

    _displayVal : 0,

    _submitVal : 0,

    listeners: {
        'focus': function(_this, event, eOpts) {
            this.value = this._submitVal;
            this.setRawValue(this.value);
        }
    },

    initComponent: function() {
        this.setValue(this.value);
        this.callParent(arguments);
    },

    setValue : function(v) {
        var v = this.parseValue(v);
        if (v) {
        } else {
            v = 0;
        }
        this._submitVal = this.fixPrecision(v);
        this._displayVal = this.moneyCharactor + ' ' + Ext.util.Format.number(this._submitVal, this.moneyFormatter);
        arguments[0] = this._displayVal;
        this.callParent(arguments);
        if (this.moneyColored) {
            if (this._submitVal >= 0) {
                this.setFieldStyle({
                    "text-align":"right",
                    "color" : 'GREEN'
                });
            } else {
                this.setFieldStyle({
                    "text-align":"right",
                    "color" : 'RED'
                });
            }
        }
    },

    beforeBlur : function() {
        var v = this.parseValue(this.getRawValue());
        this.setValue(v);
    },

    validateValue : function(value) {
        value = this._submitVal == '' ? 0 : this._submitVal;
        if(value.length < 1){ // if it's blank and textfield didn't flag it then it's valid
            return true;
        }
        value = String(value).replace(this.decimalSeparator, ".");
        if(isNaN(value)){
            this.markInvalid(String.format(this.nanText, value));
            return false;
        }
        var num = this.parseValue(value);
        if(num < this.minValue){
            this.markInvalid(String.format(this.minText, this.minValue));
            return false;
        }
        if(num > this.maxValue){
            this.markInvalid(String.format(this.maxText, this.maxValue));
            return false;
        }
        return true;
    },

    parseValue : function(value){
        value = parseFloat(String(value).replace(this.decimalSeparator, "."));
        return isNaN(value) ? '' : value;
    },

    fixPrecision : function(value){
        var nan = isNaN(value);
        if(!this.allowDecimals || this.decimalPrecision == -1 || nan || !value){
            return nan ? '' : value;
        }
        return parseFloat(parseFloat(value).toFixed(this.decimalPrecision));
    },

    initEvents : function() {
        var allowed = this.baseChars+'';
        var pressAllowed = this.baseChars+'';
        if (this.moneyCharactor != '') {
            allowed += this.moneyCharactor;
        }
        if (this.moneyFormatter != '') {
            allowed += ',:';
        }
        if(this.allowDecimals){
            allowed += this.decimalSeparator;
            pressAllowed += this.decimalSeparator;;
        }
        if(this.allowNegative){
            allowed += "-";
            pressAllowed += '-';
        }
        this.stripCharsRe = new RegExp('[^'+allowed+']', 'gi');
        var keyPress = function(e){
            var k = e.getKey();
            if(!Ext.isIE && (e.isSpecialKey() || k == e.BACKSPACE || k == e.DELETE)){
                return;
            }
            var c = e.getCharCode();
            if(pressAllowed.indexOf(String.fromCharCode(c)) === -1){
                e.stopEvent();
            }
        };
        this.el.on("keypress", keyPress, this);
        this.callParent(arguments);
    },

    constructor: function (config) {
        this.callParent(arguments);
    },

    getSubmitValue : function() {
        return this._submitVal == 0 ? 0 : this._submitVal;
    }
});

 使用示例:

  

                    {
                        xtype: "money",
                        name: "registrationCapital",
                        fieldLabel: "注册资本"
                    }

 

 

 

 

  • 大小: 8.4 KB
  • 大小: 6.3 KB
  • 大小: 14 KB
分享到:
评论

相关推荐

    ExtJs5 去掉textfield边框

    在ExtJs5中,开发人员有时需要自定义UI以满足特定的设计需求,比如去掉`textfield`组件的边框。在给定的描述中,我们看到开发者遇到了一个问题:默认情况下,ExtJs5的`textfield`组件有明显的边框,但通过添加特定的...

    Extjs 3.0 中文API

    7. **表单(Form)组件**:表单组件包含各种输入控件,如文本框(TextField)、选择框(ComboBox)、日期选择器(DateField)等,支持数据验证和提交。 8. **树形结构(Tree)**:提供了树形组件,可用于展示和操作...

    Extjs大全深入浅出

    - **表单控件**:TextField、TextArea、ComboBox等,这些控件通常用于收集用户输入的信息。 - **复杂控件**:如GridPanel、TreePanel、Viewport等,适用于展示大量数据或构建复杂的应用界面。 #### 四、数据绑定与...

    extjs3.0 API 中英

    5. **表单组件**:ExtJS 3.0包含一系列强大的表单组件,如文本框(TextField)、复选框(Checkbox)、下拉列表(ComboBox)等,它们都支持验证和数据绑定。 6. **图表组件**:通过ExtJS的Charts模块,开发者可以...

    EXT时间控件的扩展

    xtype : 'textfield', anchor : '90%', fieldLabel:"生效时间" + CONSTANT.RED_FONT, allowBlank: false, name : "effectDate", readOnly : "true", cls : '...

    精通JS脚本之ExtJS框架.part2.rar

    7.2.1 文本输入控件Ext.form.TextField 7.2.2 多行文本输入控件Ext.form.TextArea 7.2.3 单选框 7.2.4 复选框 7.2.5 下拉列表框 7.2.6 日期输入控件Ext.form.DateField 7.2.7 在线编辑器Ext.form.HtmlEditor ...

    很不错的ExtJs PPT

    EXTJS还提供了一款灵活的时间控件,允许用户自定义时间格式,并进行合法性校验。 要开始EXTJS的学习,首先需要下载EXTJS发布包,其中包含必要的JS类库和CSS样式库。在实际部署时,EXTJS的文件引用通常是相对路径,...

    Extjs基础教程

    Extjs 提供了大量的 UI 控件,以下是一些常用的控件: 1. **面板**(Panel):用于容纳其他控件的容器。 2. **按钮**(Button):用于触发事件或执行操作的标准按钮。 3. **文本框**(TextField):用于接收用户...

    extjs控件列表

    ### ExtJS控件详解 #### 基本组件 **Ext.Button** - **描述**: 提供了一种标准的用户交互方式,通常用于触发特定事件或功能。 - **用途**: 创建按钮,可以设置图标、文本、工具提示等。 **Ext.SplitButton** - **...

    精通JS脚本之ExtJS框架.part1.rar

    7.2.1 文本输入控件Ext.form.TextField 7.2.2 多行文本输入控件Ext.form.TextArea 7.2.3 单选框 7.2.4 复选框 7.2.5 下拉列表框 7.2.6 日期输入控件Ext.form.DateField 7.2.7 在线编辑器Ext.form.HtmlEditor ...

    Extjs xtype集合

    在Extjs开发过程中,`xtype`(扩展类型)是极为重要的一个概念。它实际上是一种类型标识符,用于快速创建特定类型的组件实例。通过使用预定义的`xtype`值,开发者可以方便地构建出各种复杂的用户界面而无需编写大量...

    Extjs属性大全

    - **grow**:设置文本字段是否动态扩展,默认为`false`。 - **growMin**:设置最小宽度。 - **growMax**:设置最大宽度。 - **inputType**:定义输入类型,默认为`text`。 - **maskRe**:输入掩码正则表达式。 - **...

    EXTJS___API详解

    **Checkbox, Radio, HtmlEditor, TextField, NumberField, TextArea, TriggerField 类**:表单字段类,提供了各种输入控件,如复选框、单选按钮、富文本编辑器等。 EXTJS的API详尽且强大,这些只是其中一部分,...

    Extjs学习笔记之四 工具栏和菜单

    首先,Extjs是一个基于JavaScript的前端框架,它提供了一套丰富的组件和控件,让开发者能够快速构建丰富的用户界面。工具栏(Toolbar)是用户界面中常见的元素之一,通常用于放置一系列操作按钮或者其他控件。在...

Global site tag (gtag.js) - Google Analytics