2016-08-11 80 views
0

想要为美元格式化货币字段。所以如果用户输入14590.1,它会将其更改为14,590.10。我宁愿不要有美元符号,但我目前的代码确实有这个。客户端javascript格式编号(货币)

我觉得我下面有什么不错,虽然我也想检查一个有效的数字,并且如果无效的话把用户带回现场。

我认为这将是简单的,那里会有一个功能来做到这一点,但我找不到一个。

有什么比我扔在一起更好?

<?xml version="1.0" encoding="UTF-8"?> 
<xp:view 
    xmlns:xp="http://www.ibm.com/xsp/core" 
    xmlns:xe="http://www.ibm.com/xsp/coreex"> 
    <xp:scriptBlock 
     id="scriptBlock2" 
     type="text/javascript"> 
     <xp:eventHandler 
      id="formatNumber" 
      submit="false" 
      event="onClientLoad"> 
     <xp:this.script><![CDATA[ 
     formatNumber = function(x) { 

       //Must remove $ and any commas 
       y = x.replace(',',''); 
       z = y.replace('$',''); 

       //Must fix to 2 decimal places 
       if ((typeof z) === 'string'){ 
        z = parseFloat(z).toFixed(2)} 
       else { 
        z = z.toFixed(2) 
       } 

       //Now put it back in the field 
       XSP.getElementById("#{id:djCurrencyTextBox1}").value = parseFloat(z); 
       XSP.partialRefreshPost('#{id:djCurrencyTextBox1}'); 
      } 
]]></xp:this.script> 
     </xp:eventHandler> 
    </xp:scriptBlock> 
    <xp:inputText 
     id="djCurrencyTextBox1" 
     value="#{viewScope.a}" 
     styleClass="pull-right" 
     style="width:200px;text-align:right" 
     defaultValue="0"> 
     <xp:this.converter> 
      <xp:convertNumber type="currency"></xp:convertNumber> 
     </xp:this.converter> 
     <xe:this.dojoAttributes> 
      <xp:dojoAttribute 
       name="input" 
       value="text-align: right"> 
      </xp:dojoAttribute> 
     </xe:this.dojoAttributes> 
     <xp:eventHandler 
      event="onchange" 
      submit="false"> 
      <xe:this.script><![CDATA[val = XSP.getElementById("#{id:djCurrencyTextBox1}").value 
formatNumber(val);]]></xe:this.script> 
     </xp:eventHandler> 
    </xp:inputText> 
</xp:view> 

我试过使用道场,但我无法做到的是接受一个值,如果用户没有输入两位数的美分。如果用户输入1234并且选项卡不在该字段中,我希望将其修改为1234.00。如果他们输入1234.8并且制表符应该是1234.80。我,我不认为我将正确的属性:

<xe:djCurrencyTextBox 
     id="djCurrencyTextBox2" 
     value="#{doc.prjAmtColumn11}" 
     styleClass="pull-right" 
     style="width:100px;text-align:right" 
     defaultValue="0"> 
     <xe:this.dojoAttributes> 
      <xp:dojoAttribute 
       name="input" 
       value="text-align: right" /> 
      <xp:dojoAttribute 
       name="constraints" 
       value="fractional:yes"> 
      </xp:dojoAttribute> 
      <xp:dojoAttribute 
       name="places" 
       value="2"> 
      </xp:dojoAttribute> 
     </xe:this.dojoAttributes> 
     <xe:this.constraints> 
      <xe:djNumberConstraints 
       currency="USD" 
       fractional="auto" 
       type="currency" 
       places="2"> 
      </xe:djNumberConstraints> 
     </xe:this.constraints> 
     <xp:eventHandler 
      event="onchange" 
      submit="false"> 
      <xp:this.script><![CDATA[calculate();]]></xp:this.script> 
     </xp:eventHandler> 
    </xe:djCurrencyTextBox> 
+3

这可能会帮助:http://stackoverflow.com/questions/149055/how-can-i-format-numbers-as-money-in-javascript/9318724#9318724 –

+0

这只要(a)你的代码按预期工作,(b)你的代码是真实代码而不是代码示例,并且(c)您的代码包含在问题的主体中。如果您希望通过同行评审来改进代码的各个方面,请将其发布在代码评审中。 –

+0

看看cleave.js,如果你只想格式化UI中的值并将实际的数值存储在数据库中,我昨天才发现它(所以没有任何经验),但它可能会诀窍。 –

回答

0

道场货币文本框控件,你想要做什么,在控制面板中的道场形式抽屉下包含在9.0.1。

霍华德

<xe:djCurrencyTextBox id="djCurrencyTextBox1" 
       value="#{document1.NumField_2}" 
       promptMessage="enter a US dollar amount"> 
       <xe:this.constraints> 
        <xe:djNumberConstraints currency="USD" 
         type="currency"> 
        </xe:djNumberConstraints> 
       </xe:this.constraints> 
       <xp:this.converter> 
        <xp:convertNumber></xp:convertNumber> 
       </xp:this.converter> 
      </xe:djCurrencyTextBox> 
+0

霍华德,谢谢你的回复。我添加了我正在尝试做的事情,但无法使用dojo - 自动扩展到2位小数。往上看。你知道我需要给dojo货币文本框做这个属性吗? –

+0

但是,它只会添加小数位,如果你根本不输入任何小数位,如果你输入一个小数点,你必须添加两个...所以,这可能不会做你想要的... – Howard