1.限制输入长度
Ext.form.TextField 的 maxLength/size 处理的并不是很好,设置了maxLength后还是可以任意输入,国外extjs论坛看到有人的帖子,通过prototype重定义这两个属性,试了一下,很有效
- Ext.form.TextField.prototype.size = 20;
- Ext.form.TextField.prototype.initValue = function() {
- if (this.value !== undefined) {
- this.setValue(this.value);
- } else if (this.el.dom.value.length > 0) {
- this.setValue(this.el.dom.value);
- }
- this.el.dom.size = this.size;
- if (!isNaN(this.maxLength) && (this.maxLength * 1) > 0
- && (this.maxLength != Number.MAX_VALUE)) {
- this.el.dom.maxLength = this.maxLength * 1;
- }
- };
Ext.form.TextField.prototype.size = 20; Ext.form.TextField.prototype.initValue = function() { if (this.value !== undefined) { this.setValue(this.value); } else if (this.el.dom.value.length > 0) { this.setValue(this.el.dom.value); } this.el.dom.size = this.size; if (!isNaN(this.maxLength) && (this.maxLength * 1) > 0 && (this.maxLength != Number.MAX_VALUE)) { this.el.dom.maxLength = this.maxLength * 1; } };
上面的js放在ext-all.js的引用之后就可以了,然后再指定maxLength属性就能控制输入长度
2.限制输入内容
参考了numberfield源码,以下控制TextField只能输入数字
- var keyPress = function(e) {
- var allowed = '0123456789';
- var k = e.getKey();
- if (!Ext.isIE && (e.isSpecialKey() || k == e.BACKSPACE || k == e.DELETE)) {
- return;
- }
- var c = e.getCharCode();
- if (allowed.indexOf(String.fromCharCode(c)) === -1) {
- e.stopEvent();
- };
- }
var keyPress = function(e) { var allowed = '0123456789'; var k = e.getKey(); if (!Ext.isIE && (e.isSpecialKey() || k == e.BACKSPACE || k == e.DELETE)) { return; } var c = e.getCharCode(); if (allowed.indexOf(String.fromCharCode(c)) === -1) { e.stopEvent(); }; }
在form窗体加载的事件里加入
Ext.getCmp('aMeteraddress').getEl().on('keypress', keyPress, this);
则该TextField只能输入数字