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