Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/python-2.7/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
JavaScript代码不允许我输入逗号_Javascript_Forms_Function_Input - Fatal编程技术网

JavaScript代码不允许我输入逗号

JavaScript代码不允许我输入逗号,javascript,forms,function,input,Javascript,Forms,Function,Input,我正在尝试制作一个贷款计算器,一次最多只能输入两个小数。不幸的是,要做到这一点,我必须为输入添加一个脚本,它不允许输入逗号。我不知道为什么不允许使用逗号。我想用逗号来分隔每三个数字。例如,100万 我的页面的工作示例可在以下位置查看: 我不是在寻求建议,而是我的问题的完整解决方案 以下是我当前使用的脚本: <script> function trimDP(x, dp) { x = parseFloat(x); if (dp === 0) return

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

我的页面的工作示例可在以下位置查看:

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

以下是我当前使用的脚本:

<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>

功能trimDP(x,dp){
x=parseFloat(x);
如果(dp==0)
返回Math.floor(x.toString();
dp=数学功率(10,dp | | 2);
返回(数学层((x)*dp)/dp.toString();
}
window.addEventListener('load',函数(){
var节点=document.querySelectorAll('.dp2'),i;
功能按钮(e){
var s=字符串.fromCharCode(e.keyCode);
如果(s=='。)
if(this.value.indexOf('.')=-1)
return;//允许键入“”`
this.value=trimDP(this.value+s);
e、 预防默认值();
};
函数更改(){
this.value=trimDP(this.value);
}
对于(i=0;i
这是我的输入代码:

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

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

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

有关所需函数类型的示例,请参见其他问题:


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


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

这里有几个错误

正如我作为评论所写的那样
e.keyCode
在Firefox上不起作用,至少在我的上不起作用。相反,你应该这样做

var s = String.fromCharCode(e.keycode || e.charCode);
通过执行
e.preventDefault()
在keypress listener中,您正在禁用任何按键,包括箭头键、退格键、删除键等

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


更多信息。

当对您的输入调用
trimDP
时,
parseFloat
会删除逗号。我该如何处理我的代码?恐怕有一点。您需要重写解析输入的代码,以便它允许逗号字符。。。那个么,你们将如何处理错放的逗号呢?好吧,我给你们一张赞成票,最好的答案,如果你们能做到这一点,我将表示感谢。我有一个计划,别担心。只是警告你,如果你按“为我做作业”的角度,这个问题可能会结束。Stack Overflow是来帮助您的,而不是为您编写代码的。来吧!而且只需几秒钟。:-)是的,它现在可以在FireFox上使用了。谢谢你。如果我取出
e.preventDefault()它使您键入的所有内容都可以输入两次。例如,如果我输入2,它将是22。最好的答案,因为你给了我帮助解决问题的信息,然后是一些。