if (Ext.form.NumberField) { Ext.apply( Ext.form.NumberField.prototype, { decimalPrecision: 2, // allowNegative :false, allowDecimals: true // allowBlank : false , cls: 'numReadOnly' // private , FormatComma: true // private , initEvents: function () { Ext.form.NumberField.superclass.initEvents .call(this); var allowed = this.baseChars + ''; if (this.allowDecimals) { allowed += this.decimalSeparator; } if (this.FormatComma) { allowed += ","; } if (this.allowNegative) { allowed += "-"; } 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 (allowed.indexOf(String .fromCharCode(c)) === -1) { e.stopEvent(); } }; this.el.on("keypress", keyPress, this); }, // private validateValue: function (value) { var tmpvalue = this.removeCommas(String(value)); if (!Ext.form.NumberField.superclass.validateValue .call(this, tmpvalue)) { return false; } // if (!Ext.form.NumberField.superclass.validateValue // .call(this, value)) { // return false; // } if (value.length < 1) { // if it's blank // and textfield // didn't flag // it then it's // valid return true; } if (this.FormatComma) { value = this.removeCommas(String(value)); } 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; }, 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)); }, setValue: function (v) { v = typeof v == 'number' ? v : (String( this.removeCommas(v)).replace( this.decimalSeparator, ".") ); v = isNaN(v) ? '' : String(v).replace( ".", this.decimalSeparator); if (String(v).length > 0) v = parseFloat(v).toFixed( this.decimalPrecision); // if(this.FormatComma) // v=this.formatCommaStyle(v); Ext.form.NumberField.superclass.setValue .call(this, v); if (this.FormatComma && String(v).length > 0) { v = this.addCommas(v); Ext.form.NumberField.superclass.setRawValue .call(this, v); } }, parseValue: function (value) { if (this.FormatComma) value = this.removeCommas(String(value)); value = parseFloat(String(value) .replace(this.decimalSeparator, ".")); return isNaN(value) ? '' : value; }, beforeBlur: function () { var v = this.parseValue(this .getRawValue()); if (String(v).trim().length > 0) { this.setValue(this.fixPrecision(v)); } } , addCommas: function (nStr) { nStr += ''; if (nStr.length == 0) return ''; x = nStr.split('.'); x1 = x[0]; x2 = x.length > 1 ? '.' + x[1] : ''; var rgx = /(\d+)(\d{3})/; while (rgx.test(x1)) { x1 = x1.replace(rgx, '$1' + ',' + '$2'); } return x1 + x2; }, removeCommas: function (nStr) { nStr = nStr + ''; var r = /(\,)/; while (r.test(nStr)) { nStr = nStr.replace(r, ''); } return nStr; } }); }
这个是网上搜到了,稍微修改了下,原先的有个问题,就是在进行form验证的时候,无法通过,总是先试试不是有效值,这个就没有问题了