代码之家  ›  专栏  ›  技术社区  ›  Mike Sickler

当表单提交时,如何控制Ext.form.NumberField值的格式?

  •  2
  • Mike Sickler  · 技术社区  · 16 年前

    我扩展了Ext.form.Numberfield以显示数千个分隔符,并始终显示两位小数:

    Ext.override(Ext.form.NumberField, {
        baseChars: "0123456789,",
        setValue: function(v){
            v = typeof v == 'number' ? v : String(v).replace(this.decimalSeparator, ".").replace(/,/g, "");
            //v = isNaN(v) ? '' : String(v).replace(".", this.decimalSeparator);
            v = isNaN(v) ? '' : Ext.util.Format.number(this.fixPrecision(String(v)), "0,000,000.00");
                this.setRawValue(v);
            return Ext.form.NumberField.superclass.setValue.call(this, v);
        },
        fixPrecision: function(value){
            var nan = isNaN(value);
            if (!this.allowDecimals || this.decimalPrecision == -1 || nan || !value) {
                return nan ? '' : value;
            }
            return parseFloat(value).toFixed(this.decimalPrecision);
        },
        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;
            }
            value = String(value).replace(this.decimalSeparator, ".").replace(/,/g, "");
            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;
        },
        parseValue: function(value){
            value = parseFloat(String(value).replace(this.decimalSeparator, ".").replace(/,/g, ""));
            return isNaN(value) ? '' : value;
        }
    });
    

    而不是发送这些参数:

    referenceSales  10,000,000.00
    salesGoal           11,000,000.00
    

    referenceSales  10000000.00
    salesGoal        11000000.00
    
    1 回复  |  直到 16 年前
        1
  •  2
  •   Upperstage    16 年前

    当然,您知道NumberField扩展了TextField,所以没有 未经加工的 价值观(所见即所得)我建议在提交时使用正则表达式。