`

自制的EXTJS的货币输入框和百分比输入框

 
阅读更多
Ext.namespace('Ext.ux');

Ext.ux.CustomNumberField = Ext.extend(Ext.form.NumberField, {
fieldClass: 'x-form-field x-form-customnumber-field',
prefixChar: '',
suffixChar: '',
numberDelim: ',',
delimLength: 3,
alwaysShowCents: true,
onRender: function(){
Ext.ux.CustomNumberField.superclass.onRender.apply(this,arguments);
var name = this.name || this.el.dom.name;
this.hiddenField = this.el.insertSibling({
tag:'input'
,type:'hidden'
,name:name
,value:this.parseValue(this.value)
});
this.hiddenName = name;
this.el.dom.removeAttribute('name');
this.el.on({
keyup:{scope:this, fn:this.updateHidden}
,blur:{scope:this, fn:this.updateHidden}
}, Ext.isIE ? 'after' : 'before');
this.setValue = this.setValue.createSequence(this.updateHidden);
},
initEvents: function() {
Ext.ux.CustomNumberField.superclass.initEvents.call(this);
var allowed = this.baseChars + '';
var stripBeforeParse = [];

if (this.allowDecimals) {
allowed += this.decimalSeparator;
}
if (this.allowNegative) {
allowed += '-';
} if (this.prefixChar) {
allowed += this.prefixChar;
stripBeforeParse.push(Ext.escapeRe(this.prefixChar));
} if (this.suffixChar) {
allowed += this.suffixChar;
stripBeforeParse.push(Ext.escapeRe(this.suffixChar));
} if (this.numberDelim) {
allowed += this.numberDelim;
stripBeforeParse.push(Ext.escapeRe(this.numberDelim));
}
this.maskRe = new RegExp('[' + Ext.escapeRe(allowed) + ']');
this.stripBeforeParseRe = new RegExp('[' + stripBeforeParse.join('|') + ']','g');
},
updateHidden:function() {
this.hiddenField.dom.value = this.parseValue(this.getValue());
},    
getErrors: function() {
var errors = Ext.form.NumberField.superclass.getErrors.apply(this, arguments);        
return errors;
},

setValue: function(v) {
v = this.formatValue(this.parseValue(v));
Ext.form.NumberField.superclass.setValue.call(this,v);
},

parseValue: function(value) {
value = String(value).replace(this.stripBeforeParseRe, '');
value = Ext.ux.CustomNumberField.superclass.parseValue.call(this, value);
return value;
},

formatValue: function(value) {
if(Ext.isEmpty(value)) return '';
value = String(Ext.ux.CustomNumberField.superclass.fixPrecision.call(this, value));
var vSplit = value.split('.');

var cents = (vSplit[1]) ? '.' + vSplit[1] : '';
if (this.alwaysShowCents && cents == '') cents = '.00';

if (this.numberDelim && this.delimLength) {
var numbers = vSplit[0].split('');
var sNumbers = [];
var c=0;
while (numbers.length > 0) {
c++;
if (c > this.delimLength) c = 1;
sNumbers.unshift(numbers.pop());
if (c == this.delimLength && numbers.length > 0) sNumbers.unshift(this.numberDelim);
}
value = sNumbers.join('') + cents;
} else {
value = vSplit[0] + cents;
}
if (this.prefixChar) value = this.prefixChar + String(value);
if (this.suffixChar) value = String(value) + this.suffixChar;
return value;
}
});

Ext.reg('custnumberfield',Ext.ux.CustomNumberField);

Ext.ux.MoneyField = Ext.extend(Ext.ux.CustomNumberField, {
currencyChar: '¥',
initComponent: function(){
Ext.apply(this,{
prefixChar: this.currencyChar  
});
Ext.ux.MoneyField.superclass.initComponent.apply(this,arguments);
}
});

Ext.reg('moneyfield', Ext.ux.MoneyField);

Ext.ux.PercentField = Ext.extend(Ext.ux.CustomNumberField, {
percentChar: '%',
initComponent: function(){
Ext.apply(this,{
suffixChar: this.percentChar  
});
Ext.ux.PercentField.superclass.initComponent.apply(this,arguments);
}
});

Ext.reg('percentfield', Ext.ux.PercentField); 

 

分享到:
评论

相关推荐

    extjs输入框检索补全

    ExtJS 输入框检索补全是一种常见的前端交互功能,它极大地提高了用户在网页上输入数据时的效率和体验。这种功能通常被应用于搜索框、表单字段等,当用户开始输入时,系统会根据已有的数据集自动建议可能的匹配项,...

    ExtJS弹出密码输入框的js文件

    通过这个修改后的`Ext.MessageBox.prompt`,开发者可以更安全地在ExtJS应用程序中实现密码输入功能,而无需自己编写复杂的加密和验证逻辑。这种封装和复用代码的方式是软件开发中的最佳实践,可以提高代码的可维护性...

    Extjs表单输入框异步校验的插件实现方法

    在Extjs框架中实现表单输入框异步校验的插件方法,主要涉及到了Extjs表单组件的扩展和异步数据交互处理。以下是对该插件实现方法的详细知识点阐述: 1. 异步校验的概念:异步校验指的是用户在表单输入时,校验逻辑...

    ExtJS时间控件、IP输入控件【控件】

    通过这个压缩包,开发者可以学习如何自定义ExtJS组件来满足特定需求,如创建具有特定行为的时间选择器和IP地址输入框。这不仅涉及ExtJS API的使用,还包括对JavaScript和HTML的理解,以及前端开发的基本原理。对于想...

    下拉(条件)搜索实例extjs4.2(亲测可用).zip

    在这个“下拉(条件)搜索实例”中,我们看到开发者利用ExtJS 4.2实现了一个交互式的用户界面,其中包含了下拉菜单和条件搜索功能。 下拉搜索通常指的是在输入框中使用下拉列表作为候选选项的搜索方式,用户可以快速...

    extjs.form.file inputtype为“file”时无法用setValue方法赋值的解决方法

    NULL 博文链接:https://liyoro.iteye.com/blog/829896

    extjs 进度条的显示

    通过理解和应用以下知识点,你可以有效地在你的ExtJS项目中集成进度条,提升用户体验。 ### ExtJS中的进度条显示 #### 1. 使用`Ext.MessageBox.show()`方法创建进度条 `Ext.MessageBox.show()`是ExtJS提供的一种...

    轻松搞定Extjs 带目录

    本书作为Extjs的中文教程,旨在帮助读者快速上手Extjs,其内容涉及Extjs的基础知识和实际应用。 #### 2. JavaScript基础知识 - **类的定义**: Extjs中的类继承于JavaScript原生类,通过Ext.extend来定义。这是...

    extJs3升级extjs4方案

    ExtJS3 升级到 ExtJS4 方案 ExtJS3 升级到 ExtJS4 需要修改大量代码,主要是因为 ExtJS4 配备了一类新的系统,不向后兼容...ExtJS3 升级到 ExtJS4 需要修改大量代码,需要我们重新学习和适应 ExtJS4 的新特性和变化。

    extjs流程界面设计器参考_ExtJS工作流设计器_extjs工作流_extjs_

    基于ExtJS的工作流设计器,利用了ExtJS的强大组件模型和交互性,为用户提供了一个直观的方式来创建和编辑流程图。这样的设计器通常包括以下关键组成部分: 1. **组件库**:设计师需要一个包含各种工作流元素(如...

    数字微调输入框

    首先,数字微调输入框的设计通常包括一个文本输入框和两个箭头按钮,分别代表增加和减少数值。用户点击箭头按钮会触发事件,更新输入框中的数值。设计时需考虑用户体验,如每次点击箭头按钮增加或减少的数值量、是否...

    extjs4.1 框架和文档

    extjs4.1 框架和文档 从官网下载的extjs-4.1.0-rc1

    extjs 自动补全 模拟combobox

    Combobox由两部分组成:一个文本输入框和一个下拉列表。文本输入框允许用户输入值,而下拉列表则展示预定义的选项。在EXTJS中,你可以通过配置`store`来设置下拉列表的选项,`displayField`来指定显示的字段,`...

    Extjs配置文件和示例文件

    ExtJS是一款基于JavaScript的富客户端应用开发框架,它提供了丰富的组件库和强大的数据管理功能,使得开发者能够构建出复杂的Web应用程序。本压缩包中的“Extjs配置文件和示例文件”是针对ExtJS进行深入学习和实践的...

    ExtJs5 去掉textfield边框

    在给定的描述中,我们看到开发者遇到了一个问题:默认情况下,ExtJs5的`textfield`组件有明显的边框,但通过添加特定的配置项和CSS样式,可以成功移除这些边框。 首先,让我们详细了解一下如何在ExtJs5中配置`...

    Extjs6 下拉列表

    - ComboBox是ExtJS中的一个基础组件,它结合了文本输入框和下拉菜单,允许用户在输入时选择或搜索匹配的选项。 - 在ExtJS6中,ComboBox提供了多种配置项,如`store`(数据源)、`displayField`(显示字段)、`...

    extjs6.6框架的web项目(登录+首页)

    这个项目是一个基于EXTJS 6.6的Web应用实例,提供了完整的登录页面和首页布局,包括左侧菜单和列表展示。以下是关于EXTJS 6.6框架以及该项目的关键知识点: 1. **EXTJS 6.6框架**:EXTJS 是由Sencha公司开发的一个...

    EXTJS修改颜色实例源码

    - `defaults` 为所有表单字段设置默认属性,如宽度和输入框类型。 2. **ComboBox**: - `Ext.form.ComboBox` 是一个下拉选择框,它提供了可搜索的下拉列表。 - 在实例中,`fieldLabel` 定义了字段的标签,`xtype...

    Extjs 2.2 Extjs 3.21 js

    这两个版本在Web开发领域都有着广泛的运用,它们各自拥有不同的特性和改进,对于理解ExtJS的发展历程和选择适合项目需求的版本至关重要。 首先,我们来看ExtJS 2.2。这个版本是ExtJS早期的一个稳定版,发布于2008年...

Global site tag (gtag.js) - Google Analytics