X-Git-Url: http://git.ithinksw.org/extjs.git/blobdiff_plain/c930e9176a5a85509c5b0230e2bff5c22a591432..530ef4b6c5b943cfa68b779d11cf7de29aa878bf:/src/widgets/form/NumberField.js diff --git a/src/widgets/form/NumberField.js b/src/widgets/form/NumberField.js index 1325d5bf..567a8cba 100644 --- a/src/widgets/form/NumberField.js +++ b/src/widgets/form/NumberField.js @@ -1,6 +1,6 @@ /*! - * Ext JS Library 3.0.0 - * Copyright(c) 2006-2009 Ext JS, LLC + * Ext JS Library 3.2.1 + * Copyright(c) 2006-2010 Ext JS, Inc. * licensing@extjs.com * http://www.extjs.com/license */ @@ -78,30 +78,41 @@ Ext.form.NumberField = Ext.extend(Ext.form.TextField, { this.maskRe = new RegExp('[' + Ext.escapeRe(allowed) + ']'); Ext.form.NumberField.superclass.initEvents.call(this); }, - - // private - validateValue : function(value){ - 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; + + /** + * Runs all of NumberFields validations and returns an array of any errors. Note that this first + * runs TextField's validations, so the returned array is an amalgamation of all field errors. + * The additional validations run test that the value is a number, and that it is within the + * configured min and max values. + * @param {Mixed} value The value to get errors for (defaults to the current field value) + * @return {Array} All validation errors for this field + */ + getErrors: function(value) { + var errors = Ext.form.NumberField.superclass.getErrors.apply(this, arguments); + + value = value || this.processValue(this.getRawValue()); + + if (value.length < 1) { // if it's blank and textfield didn't flag it then it's valid + return errors; } + value = String(value).replace(this.decimalSeparator, "."); + if(isNaN(value)){ - this.markInvalid(String.format(this.nanText, value)); - return false; + errors.push(String.format(this.nanText, value)); } + var num = this.parseValue(value); + if(num < this.minValue){ - this.markInvalid(String.format(this.minText, this.minValue)); - return false; + errors.push(String.format(this.minText, this.minValue)); } + if(num > this.maxValue){ - this.markInvalid(String.format(this.maxText, this.maxValue)); - return false; + errors.push(String.format(this.maxText, this.maxValue)); } - return true; + + return errors; }, getValue : function(){ @@ -109,10 +120,26 @@ Ext.form.NumberField = Ext.extend(Ext.form.TextField, { }, setValue : function(v){ - v = typeof v == 'number' ? v : parseFloat(String(v).replace(this.decimalSeparator, ".")); + v = Ext.isNumber(v) ? v : parseFloat(String(v).replace(this.decimalSeparator, ".")); v = isNaN(v) ? '' : String(v).replace(".", this.decimalSeparator); return Ext.form.NumberField.superclass.setValue.call(this, v); }, + + /** + * Replaces any existing {@link #minValue} with the new value. + * @param {Number} value The minimum value + */ + setMinValue : function(value){ + this.minValue = Ext.num(value, Number.NEGATIVE_INFINITY); + }, + + /** + * Replaces any existing {@link #maxValue} with the new value. + * @param {Number} value The maximum value + */ + setMaxValue : function(value){ + this.maxValue = Ext.num(value, Number.MAX_VALUE); + }, // private parseValue : function(value){