游乐游手机版
首页/前端开发/文章详情

Extjs NumberField添加单位的实现方法

时间:2026-06-10 07:01
在ExtJS开发中,数字输入框后面直接显示单位(例如金额后加“元”、数量后加“个”)是常见需求,但官方组件并未直接提供该功能。如何实现?思路很简单:通过扩展TextField,在渲染时动态追加一个单位元素。下面详细分享具体实现方法。 首先,定义一个单位文本扩展类,保存为UnitText js:

在ExtJS开发中,数字输入框后面直接显示单位(例如金额后加“元”、数量后加“个”)是常见需求,但官方组件并未直接提供该功能。如何实现?思路很简单:通过扩展TextField,在渲染时动态追加一个单位元素。下面详细分享具体实现方法。

Extjs NumberField后面加单位实现思路

首先,定义一个单位文本扩展类,保存为UnitText.js

// 输入框textfield后面放字unitText定义:
Ext.override(Ext.form.TextField, {
    unitText : '',
    onRender : function(ct, position) {
        Ext.form.TextField.superclass.onRender.call(this, ct, position);
        if (this.unitText != ''){
            this.unitEl = ct.createChild({
                tag: 'div',
                html: this.unitText
            });
            this.unitEl.addClass('x-form-unit');
            this.width = this.width - (this.unitText.replace(/[^x00-xff]/g, "xx").length * 6 + 2);
            this.alignErrorIcon = function() {
                this.errorIcon.alignTo(this.unitEl, 'tl-tr', [2, 0]);
            };
        }
    }
});

这段代码的核心在于重写onRender方法:在输入框渲染完成后,通过createChild动态创建一个包含单位文本的div,并为其添加样式类x-form-unit。同时,自动调整输入框宽度,减去单位占用的空间,避免布局错位。此外,错误图标(errorIcon)的对齐方式也被重新定位到单位元素上。

接下来,在JSP页面中引入这个JS文件,并补充对应的CSS样式:



样式设计很简单:让单位文本与输入框处于同一行,高度对齐,并保留少量内边距。注意这里使用了两个display声明——第一个inline-block是标准写法,第二个inline用于兼容某些旧版IE浏览器。

完成上述准备后,使用时只需在NumberField配置中添加unitText属性即可:

var jine = new Ext.form.NumberField({
    id: 'je',
    fieldLabel: '金额',
    allowDecimals: true, // 允许小数点
    allowNegative: false, // 允许负数
    width: 100,
    style: 'text-align:right',
    unitText: ' 元'
});

实际效果是:金额输入框后自动显示“元”字,输入的数字右对齐,整个组件看起来非常自然。当然,你也可以将单位换成“个”“人”“件”等任意文本,甚至保留一个空格以提升视觉舒适度。

这个思路不仅适用于NumberField,所有继承自TextField的组件都可以直接使用。如果需要更灵活的单位展示(例如带图标的单位),也可以在此基础上继续扩展。希望这个小技巧能对你有所帮助。

来源:https://www.jb51.net/article/40127.htm
上一篇ExtJS ComboBox下拉列表store数据格式用法详解 下一篇ExtJS4获取Grid修改后数据的方法
本站内容用于信息整理与展示,如有侵权或内容问题请及时联系处理。

相关推荐

补充同频道和同主题内容,方便继续浏览更多相关内容。

同类最新

继续查看同栏目最近更新的文章。

更多
HTML文档版权声明结构与基础脚手架代码质量解析
前端开发 · 2026-07-07

HTML文档版权声明结构与基础脚手架代码质量解析

版权声明需用语义化``标签,©符号使用`©`实体;年份通过服务端、构建或JS分层兜底;`rel= "license "`仅指向真实许可证文件才有效。

基于HTML模板的组件化全栈交互方案
前端开发 · 2026-07-07

基于HTML模板的组件化全栈交互方案

纯HTML模板仅作静态结构,全栈交互需后端注入数据、前端JS激活模板及用户事件触发双向链路。``标签惰性,不执行脚本或加载资源,需通过克隆填充数据并手动绑定事件实现交互,父子传值依赖JS对象与自定义事件。

Bootstrap修改Badge徽章边框为圆点样式的方法
前端开发 · 2026-07-07

Bootstrap修改Badge徽章边框为圆点样式的方法

将BootstrapBadge改为圆点:自定义类设置等宽高、border-radius:50%、padding:0、font-size:0;Bootstrap5 2+需加display:inline-block;注意垂直对齐,避免min-width干扰,背景色用background-color更可控。

Bootstrap响应式多栏Footer社交图标排版实现
前端开发 · 2026-07-07

Bootstrap响应式多栏Footer社交图标排版实现

使用Bootstrap5的grid系统实现响应式多栏Footer,按断点设置列宽;以FontAwesome处理社交图标,避免使用img;利用list-unstyled组织链接列表;借助flex-column容器配合mt-auto使版权行自动贴底,避免fixed-bottom固定定位的弊端。

如何用Shadow DOM隔离组件内外事件分发
前端开发 · 2026-07-07

如何用Shadow DOM隔离组件内外事件分发

ShadowDOM内部事件默认不穿透影子边界,需显式设置composed:true才能被外部监听。此时event target指向宿主元素,真实触发源需通过event composedPath()[0]获取。原生事件手动派发时也必须声明composed:true。应避免在宿主上依赖event target做逻辑分支,建议在shadowroot内绑定事件或使用