超过货币输入字段

时间:2012-02-08 22:16:41

标签: 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.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美元的货币。

3 个答案:

答案 0 :(得分:0)

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

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

您也可以将此应用于onblur事件,但我的偏好是在提交表单时显示验证错误。

答案 1 :(得分:0)

看起来你正在尝试解析一个字符串,很好地将它转换成美元和美分,如果它小于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

答案 2 :(得分:0)

从我可以从你的问题中收集的内容,我认为你正在寻找这样的东西。基本上如果我们有一个有效的条目,例如$100.00,我们继续,返回true等,否则如果我们有一些看起来像int或float的东西我们可以重新格式化并递归函数,否则提示用户输入vaild < / p>

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;
        }
    }
});

这是一个demo