【问题标题】:JavaScript Code is not Letting me Input CommasJavaScript 代码不允许我输入逗号
【发布时间】:2023-03-18 11:54:01
【问题描述】:

我正在尝试制作一个贷款计算器,它一次最多只能输入两位小数。不幸的是,为此我不得不为输入添加一个脚本,该脚本不允许输入逗号。我不确定为什么这不允许逗号。我想要逗号来分隔每三个数字。例如,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">

【问题讨论】:

  • 当trimDP 在您的输入中被调用时,parseFloat 会删除逗号。
  • 我应该如何处理我的代码?
  • 恐怕有点。您需要重写解析输入的代码,以便允许逗号字符...然后您将如何处理放错位置的逗号?
  • 好吧,我提供一票,最佳答案,如果您能做到这一点,我将非常感谢。我有这个计划,别担心。
  • 提醒您,如果您推动“为我做作业”的角度,这个问题可能会被关闭。 Stack Overflow 随时为您提供帮助,而不是为您编写代码。

标签: javascript forms function input


【解决方案1】:

你有几个错误。

正如我所写的评论。 e.keyCode 不能在 Firefox 上运行,至少它不能在我的上运行。相反,你应该这样做

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

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

我什至不会提及一百次parseFloat。

更多关于Determining which key is pressed。

【讨论】:

  • 是的,它现在可以在 FireFox 上运行。谢谢你。如果我取出e.preventDefault();,它会使您输入的所有内容都输入两次。例如,如果我输入 2,它将是 22。
  • 最佳答案,因为你给了我信息来帮助我解决我的问题,然后一些。
【解决方案2】:

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

如果您想支持逗号字符,该函数将需要认真重写。

【讨论】:

    【解决方案3】:

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

    如果您希望人们能够输入逗号,则必须停止使用数学函数,而是将数据作为字符串处理,并使用正则表达式去除多余的小数位。

    有关您需要的功能类型的示例,请参见其他问题:

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

    【讨论】:

    • 打我一拳!而且只有几秒钟。 :-)
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-10-14
    • 2022-09-22
    • 1970-01-01
    相关资源
    最近更新 更多