JavaScript代码不允许我输入逗号

时间:2014-04-10 20:53:27

标签: javascript forms function input

我正在尝试制作一个贷款计算器,只允许一次输入最多两位小数。不幸的是,要做到这一点,我不得不为输入添加一个不允许输入逗号的脚本。我不确定为什么这不允许使用逗号。我想用逗号来分隔每三个数字。例如,1,000,000。

我的页面的工作示例可在以下位置查看:http://thetotempole.ca/sales/loancalculator.php

我不是在寻找建议,而是寻找我问题的完整解决方案。

这是我目前使用的脚本:

<script>
function trimDP(x, dp) {
    x = parseFloat(x);
    if (dp === 0)
        return Math.floor(x).toString();
    dp = Math.pow(10, dp || 2);
    return (Math.floor((x) * dp) / dp).toString();
}

window.addEventListener('load', function () {
    var nodes = document.querySelectorAll('.dp2'), i;
    function press(e) {
        var s = String.fromCharCode(e.keyCode);
        if (s === '.')
            if (this.value.indexOf('.') === -1)
                return; // permit typing `.`
        this.value = trimDP(this.value + s);
        e.preventDefault();
    };
    function change() {
        this.value = trimDP(this.value);
    }
    for (i = 0; i < nodes.length; ++i) {
        nodes[i].addEventListener('keypress', press);
        nodes[i].addEventListener('change', change);
    }
});
</script>

这是我的输入代码:

<input type=text name=loan size=10 class="dp2">

3 个答案:

答案 0 :(得分:1)

你有几个错误。

正如我作为评论写的那样。 e.keyCode不会在Firefox上运行,至少它不适用于我的。相反,你应该做

var s = String.fromCharCode(e.keycode || e.charCode);

通过在按键监听器中执行e.preventDefault();,您将禁用任何按键操作,包括箭头键,退格键,删除键等。

我甚至不提一百次parseFloat

更多关于Determining which key is pressed

答案 1 :(得分:0)

这是因为您在号码上使用parseFloat,然后将字段的值设置回该值。将字符串转换为数字后,将删除逗号,因为数字中唯一有效的非数字字符是表示小数位的句点。

如果您希望人们能够输入逗号,您将不得不停止使用数学函数,而是将数据作为字符串处理,并使用正则表达式来修剪额外的小数位。

有关您需要的功能的示例,请参阅此其他问题:

How to print a number with commas as thousands separators in JavaScript

答案 2 :(得分:0)

您的tripDP函数正在调用parseFloat,删除小数点以外的所有非数字字符。这就是为什么你不能在那里输入“a”或“@”...

如果你想支持逗号字符,那么该函数需要重写。