NumberField.js
上传用户:shuoshiled
上传日期:2018-01-28
资源大小:10124k
文件大小:5k
源码类别:

中间件编程

开发平台:

JavaScript

  1. /*!
  2.  * Ext JS Library 3.0.0
  3.  * Copyright(c) 2006-2009 Ext JS, LLC
  4.  * licensing@extjs.com
  5.  * http://www.extjs.com/license
  6.  */
  7. /**
  8.  * @class Ext.form.NumberField
  9.  * @extends Ext.form.TextField
  10.  * Numeric text field that provides automatic keystroke filtering and numeric validation.
  11.  * @constructor
  12.  * Creates a new NumberField
  13.  * @param {Object} config Configuration options
  14.  * @xtype numberfield
  15.  */
  16. Ext.form.NumberField = Ext.extend(Ext.form.TextField,  {
  17.     /**
  18.      * @cfg {RegExp} stripCharsRe @hide
  19.      */
  20.     /**
  21.      * @cfg {RegExp} maskRe @hide
  22.      */
  23.     /**
  24.      * @cfg {String} fieldClass The default CSS class for the field (defaults to "x-form-field x-form-num-field")
  25.      */
  26.     fieldClass: "x-form-field x-form-num-field",
  27.     /**
  28.      * @cfg {Boolean} allowDecimals False to disallow decimal values (defaults to true)
  29.      */
  30.     allowDecimals : true,
  31.     /**
  32.      * @cfg {String} decimalSeparator Character(s) to allow as the decimal separator (defaults to '.')
  33.      */
  34.     decimalSeparator : ".",
  35.     /**
  36.      * @cfg {Number} decimalPrecision The maximum precision to display after the decimal separator (defaults to 2)
  37.      */
  38.     decimalPrecision : 2,
  39.     /**
  40.      * @cfg {Boolean} allowNegative False to prevent entering a negative sign (defaults to true)
  41.      */
  42.     allowNegative : true,
  43.     /**
  44.      * @cfg {Number} minValue The minimum allowed value (defaults to Number.NEGATIVE_INFINITY)
  45.      */
  46.     minValue : Number.NEGATIVE_INFINITY,
  47.     /**
  48.      * @cfg {Number} maxValue The maximum allowed value (defaults to Number.MAX_VALUE)
  49.      */
  50.     maxValue : Number.MAX_VALUE,
  51.     /**
  52.      * @cfg {String} minText Error text to display if the minimum value validation fails (defaults to "The minimum value for this field is {minValue}")
  53.      */
  54.     minText : "The minimum value for this field is {0}",
  55.     /**
  56.      * @cfg {String} maxText Error text to display if the maximum value validation fails (defaults to "The maximum value for this field is {maxValue}")
  57.      */
  58.     maxText : "The maximum value for this field is {0}",
  59.     /**
  60.      * @cfg {String} nanText Error text to display if the value is not a valid number.  For example, this can happen
  61.      * if a valid character like '.' or '-' is left in the field with no number (defaults to "{value} is not a valid number")
  62.      */
  63.     nanText : "{0} is not a valid number",
  64.     /**
  65.      * @cfg {String} baseChars The base set of characters to evaluate as valid numbers (defaults to '0123456789').
  66.      */
  67.     baseChars : "0123456789",
  68.     // private
  69.     initEvents : function(){
  70.         var allowed = this.baseChars + '';
  71.         if (this.allowDecimals) {
  72.             allowed += this.decimalSeparator;
  73.         }
  74.         if (this.allowNegative) {
  75.             allowed += '-';
  76.         }
  77.         this.maskRe = new RegExp('[' + Ext.escapeRe(allowed) + ']');
  78.         Ext.form.NumberField.superclass.initEvents.call(this);
  79.     },
  80.     // private
  81.     validateValue : function(value){
  82.         if(!Ext.form.NumberField.superclass.validateValue.call(this, value)){
  83.             return false;
  84.         }
  85.         if(value.length < 1){ // if it's blank and textfield didn't flag it then it's valid
  86.              return true;
  87.         }
  88.         value = String(value).replace(this.decimalSeparator, ".");
  89.         if(isNaN(value)){
  90.             this.markInvalid(String.format(this.nanText, value));
  91.             return false;
  92.         }
  93.         var num = this.parseValue(value);
  94.         if(num < this.minValue){
  95.             this.markInvalid(String.format(this.minText, this.minValue));
  96.             return false;
  97.         }
  98.         if(num > this.maxValue){
  99.             this.markInvalid(String.format(this.maxText, this.maxValue));
  100.             return false;
  101.         }
  102.         return true;
  103.     },
  104.     getValue : function(){
  105.         return this.fixPrecision(this.parseValue(Ext.form.NumberField.superclass.getValue.call(this)));
  106.     },
  107.     setValue : function(v){
  108.      v = typeof v == 'number' ? v : parseFloat(String(v).replace(this.decimalSeparator, "."));
  109.         v = isNaN(v) ? '' : String(v).replace(".", this.decimalSeparator);
  110.         return Ext.form.NumberField.superclass.setValue.call(this, v);
  111.     },
  112.     // private
  113.     parseValue : function(value){
  114.         value = parseFloat(String(value).replace(this.decimalSeparator, "."));
  115.         return isNaN(value) ? '' : value;
  116.     },
  117.     // private
  118.     fixPrecision : function(value){
  119.         var nan = isNaN(value);
  120.         if(!this.allowDecimals || this.decimalPrecision == -1 || nan || !value){
  121.            return nan ? '' : value;
  122.         }
  123.         return parseFloat(parseFloat(value).toFixed(this.decimalPrecision));
  124.     },
  125.     beforeBlur : function(){
  126.         var v = this.parseValue(this.getRawValue());
  127.         if(!Ext.isEmpty(v)){
  128.             this.setValue(this.fixPrecision(v));
  129.         }
  130.     }
  131. });
  132. Ext.reg('numberfield', Ext.form.NumberField);