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