`
xmy20051643
  • 浏览: 40144 次
  • 性别: 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** - **...

    EXTJS实用开发指南

    - **基本控件:** 如 `button`、`textfield`、`checkbox` 等,它们提供了丰富的配置选项和事件处理机制。 - **高级控件:** 如 `gridpanel`(表格面板)、`treeview`(树形视图)等,用于展示复杂数据集。 ##### 3....

    精通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中文教程2.x

    ### Extjs中文教程2.x 知识点概览 #### 一、Extjs简介与准备...无论是基础的 UI 控件还是高级的数据展示组件,Extjs 都有着详尽且强大的支持。开发者可以根据实际需求灵活选择合适的组件和技术栈来构建自己的应用。

    EXTJS___API详解

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

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

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

Global site tag (gtag.js) - Google Analytics