2010-01-13 80 views
2

我已經擴展Ext.form.Numberfield顯示千位分隔符,始終顯示兩個小數位:如何在表單提交時控制Ext.form.NumberField值的格式?

Ext.override(Ext.form.NumberField, { 
    baseChars: ",", 
    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

當然你意識到NumberField擴展TextField,所以沒有值。 (wysiwyg)我建議在提交時使用正則表達式。

+0

任何想法如何掛鉤到表單的提交操作? – 2010-01-13 21:07:28

+0

BasicForm有一個submit()方法。你可以寫一個點擊處理程序(用於你的「GO」按鈕);它會重新格式化NumberFields中的數據,然後在表單對象上調用submit()。或者更好的是,處理程序可以從NumberFields獲取數據,清理它,然後將數據移動到隱藏字段中,然後使用表單提交數據。服務器將忽略髒字段並僅使用已清理字段中的數據。 – Upperstage 2010-01-13 22:17:57

相關問題