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

时间:2010-01-13 15:34:42

标签: extjs

我扩展了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;
    }
});

问题是在表单提交时,POST中发送的值包括逗号,迫使我在服务器端解析为字符串。有没有办法发送原始数值而不是这个特殊的逗号格式值?

而不是发送这些参数:

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

我想发送这些:

referenceSales  10000000.00
salesGoal        11000000.00

1 个答案:

答案 0 :(得分:1)

当然,您会发现NumberField扩展了TextField,因此没有原始值。 (wysiwyg)我建议在提交时使用正则表达式。