我正在尝试制作一个贷款计算器,只允许一次输入最多两位小数。不幸的是,要做到这一点,我不得不为输入添加一个不允许输入逗号的脚本。我不确定为什么这不允许使用逗号。我想用逗号来分隔每三个数字。例如,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">
答案 0 :(得分:1)
你有几个错误。
正如我作为评论写的那样。 e.keyCode
不会在Firefox上运行,至少它不适用于我的。相反,你应该做
var s = String.fromCharCode(e.keycode || e.charCode);
通过在按键监听器中执行e.preventDefault();
,您将禁用任何按键操作,包括箭头键,退格键,删除键等。
我甚至不提一百次parseFloat
。
答案 1 :(得分:0)
这是因为您在号码上使用parseFloat
,然后将字段的值设置回该值。将字符串转换为数字后,将删除逗号,因为数字中唯一有效的非数字字符是表示小数位的句点。
如果您希望人们能够输入逗号,您将不得不停止使用数学函数,而是将数据作为字符串处理,并使用正则表达式来修剪额外的小数位。
有关您需要的功能的示例,请参阅此其他问题:
How to print a number with commas as thousands separators in JavaScript
答案 2 :(得分:0)
您的tripDP
函数正在调用parseFloat
,删除小数点以外的所有非数字字符。这就是为什么你不能在那里输入“a”或“@”...
如果你想支持逗号字符,那么该函数需要重写。