Javascript 多个货币输入字段

Javascript 多个货币输入字段,javascript,forms,jquery,Javascript,Forms,Jquery,我有一个输入标签,您可以在其中输入收据总额: <input type="text" name="currency" id="currency" class="text-input" onBlur="this.value=formatCurrency(this.value);" /> Javascript如下所示: <script type="text/javascript"> function formatCurrency(num) { num = num

我有一个输入标签,您可以在其中输入收据总额:

<input type="text" name="currency" id="currency" class="text-input" onBlur="this.value=formatCurrency(this.value);"   />
Javascript如下所示:

<script type="text/javascript">

function formatCurrency(num) {
    num = num.toString().replace(/\$|\,/g,'');
    if(isNaN(num)) {
        num = "0";
    }
    sign = (num == (num = Math.abs(num)));
    num = Math.floor(num*100+0.50000000001);
    cents = num % 100;
    num = Math.floor(num/100).toString();
    if(cents < 10) {
        cents = "0" + cents;
    }
    for (var i = 0; i < Math.floor((num.length-(1+i))/3); i++) {
        num = num.substring(0,num.length-(4*i+3))+','+num.substring(num.length-(4*i+3));
    }
    return (((sign)?'':'-') + '$' + num + '.' + cents);
}

</script>

用户只能输入超过10.00美元的收据,我如何在脚本中设置?他们还需要知道他们不能输入低于10美元的货币。

如果值低于阈值,您可以在提交表单进行测试时应用验证功能,例如:

function validate()
{
  value = document.getElementById('currency');
  if (value <= 10.00)
  {
    return false
  } else
  {
    return true;
  }
}

您也可以将其应用于onblur事件,但我更喜欢在提交表单时显示验证错误

看起来您正在尝试解析字符串,将其很好地转换为美元和美分,如果小于10,则拒绝它。有一种更好的方法:

function formatCurrency(num) {

    // Remove the dollar sign
    num = num.replace("$", "");

    // Change the string to a float, and limit to 2 decimal places
    num = parseFloat(num);
    Math.round(num * 100) / 100;

    // If its less than 10, reject it
    if(num < 10) {
        alert("Too small!");
        return false;
    }

    // Return a nice string
    return "$" + num;

}

最后,如果数字为负数,您是否试图返回-99.94美元?

根据我从您的问题中收集的信息,我认为您正在寻找类似的东西。基本上,如果我们有一个有效的条目,如$100.00,我们继续,返回true等,否则如果我们有一些看起来像int或float的东西,我们可以重新格式化它并递归函数,否则提示用户使用有效条目

var foo = document.getElementById('foo');

foo.addEventListener('blur', function(e) {
    var val = e.target.value;
    var err = document.getElementById('err');
    var errMsg = 'please enter a value $10.00 or greater';
    var patt = /^\$\d+\.\d{2}$/;    
    var amount = parseInt(val.replace(/\$|\./g, ''));

    if (val !== '') {
        if (patt.test(val)) {
            if (amount < 1000) {
                err.textContent = errMsg;
            } else {
                document.getElementById('suc')
                    .textContent = 'processing request';
            }
        } else if (typeof amount == 'number' && !/[a-z]/g.test(val)) {
            if (/\.\d{2}/.test(val)) {
                e.target.value = '$' + (amount / 100);
            } else {
                e.target.value = '$' + amount + '.00';
            }
            arguments.callee(e);
        } else {
            err.textContent = errMsg;
        }
    }
});

这是一个

好的,我不确定你最后想做什么。给我在上面发布的功能一个go。嘿,谢谢你的演示,比如为什么纸条没有得到2.33美元。如果我在文本框中添加2.33,它将更改为233.00美元。。我尝试更改模式脚本,但它给出了$2.33e+22不知道为什么,对不起,我认为我已经解决了大多数错误,但是如果你输入2.333,它会变为23.33:我可能编辑了答案中的代码,但可能没有更新小提琴,我现在已经这样做了。您可能需要重构并收紧一些逻辑,如果在这样做时遇到任何问题,可以问另一个问题。我相信您所描述的问题是因为金额将包含小数,就好像它被乘以100一样,所以需要去掉,请参见金额/100