JavaScript代码不允许我输入逗号

JavaScript Code is not Letting me Input Commas

本文关键字:输入 允许我 代码 不允许 JavaScript      更新时间:2023-09-26

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

我的页面的工作示例可以在以下位置看到: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">

您有几个错误。

正如我所写的评论。e.keyCode在火狐上不起作用,至少在我的火狐上是不起作用的。相反,你应该做

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

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

我甚至一百次都不会提到parseFloat

有关确定按下哪个键的详细信息。

您的tripDP函数正在调用parseFloat,删除除小数点之外的所有非数字字符。这就是为什么你也不能在里面键入"a"或"@"。。。

如果您想支持逗号字符,则需要对该函数进行认真的重写。

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

如果你想让人们能够输入逗号,你就必须停止使用数学函数,而是将数据作为字符串处理,并使用正则表达式来修剪多余的小数点。

请参阅另一个问题,以获得所需功能的示例:

如何在JavaScript 中以逗号作为千位分隔符打印数字