我的html / javascript代码存在问题,代码应该格式化从键盘获取的数字(1 - > 0.01,2-> 0.12,3-> 1.23 ... 6-> 1,234.56)。
似乎substring和substr的结果被附加两次。在调试它工作正常,但没有调试它没有。 (1 - > 0.011,2-> 1.122,3-> 112.233) 对于删除或退格,它的工作方式相同。
以下是代码:
formatElementAmount = function(f, d) {
d = d.replace(/\./g, '');
d = d.replace(/\,/g, '');
d = parseFloat(d);
d = d + '';
var c = document.getElementById((f.target || f.srcElement).id);
var b = '0123456789';
var a = f.which || f.keyCode;
if (a == 13) { // keycode 13 = enter >
return false;
}
if (a == 9) { // keycode 9 == tab
return true;
}
if (a == 8 || a == 46) { // keyCode 8 == backspace, 46 == delete
if (d.length > 0) {
d = d.substring(0, d.length - 1);
c.value = '';
}
c.value = format(d);
return false;
}
if (c.value.length > 12) {
c.value = '';
c.value = format(d);
return false;
}
if (a >= 96 && a <= 105) { // 96 = numbpad 0, 105 = numpad 9
a = a - 48;
}
key = String.fromCharCode(a);
if (b.indexOf(key) == -1) {
return false;
}
if ((d.length == 0) && (key == '0')) {} else {
d = d + key;
}
c.value = '';
c.value = format(d);
return false;
};
format = function(f) {
if (f.length == 0) {
return '0.00';
}
if (f.length == 1) {
return '0.0' + f;
}
if (f.length == 2) {
return '0.' + f;
}
var a, b, c, d, e;
if (f.length > 2) {
a = '';
for (c = 0, d = f.length - 3; d >= 0; d--) {
if (c == 3) {
a += ',';
c = 0;
}
a += f.charAt(d);
c++;
}
b = '';
len2 = a.length;
for (d = len2 - 1; d >= 0; d--) {
b += a.charAt(d);
}
e = f.substr(f.length - 2);
b += '.' + e;
}
return b;
};
&#13;
<input id="paymentForm" name="paymentForm" type="text" value="0.00" onkeydown="if(this.value =='') this.value ='0.00';
if (!formatElementAmount(event, this.value)) {
event.stopPropagation();
}"></input>
&#13;
答案 0 :(得分:0)
您当前代码的问题是它不会阻止keyDown
事件的默认操作:
if (!formatElementAmount(event, this.value)) {
event.stopPropagation();
event.preventDefault();
}
答案 1 :(得分:0)
首先,您应该停止使用event.stopPropagation()
- 它不会停止默认事件。也不要使用不推荐的event.preventDefault()
。而是使用return false
禁用默认事件效果并停止键盘插入字符。
也可以使用keypress
事件代替keydown
(我无法解释为什么它有效,因为我不知道)。
<input id="paymentForm" name="paymentForm" type="text" value="0.00" onkeypress="if(this.value =='') this.value ='0.00';
if (!formatElementAmount(event, this.value)) {
return false;
}"></input>
我在Firefox,IE10&amp;实际上我在电脑上的边缘。