调用了两次HTML输入事件
HTML input event called twice
我的html/javascript代码有问题,代码应该格式化键盘上的数字(1->0.01,2->0.12,3->1.23…6->1234.56)。
似乎子字符串和子字符串的结果被追加了两次。在调试中它工作得很好,但没有调试就不行。(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;
};
<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>
当前代码的问题是它不能阻止keyDown
事件的默认操作:
if (!formatElementAmount(event, this.value)) {
event.stopPropagation();
event.preventDefault();
}
首先,您应该停止使用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&我电脑上的Edge。
相关文章:
- HTML/JS表单已提交两次
- 如何两次插入相同的html元素
- “index.swf”嵌入在“index.html”中,在一个页面中显示同一网站两次.HTML 标题标签/属性也显示值“
- 提交按钮有时会以 html 形式执行两次操作
- 一次提交两个 HTML 表单,一个在当前窗口中,一个在新窗口中
- Javascript 在两次 HTML 注入后停止工作
- 更改同一 HTML 标记两次
- 调用了两次HTML输入事件
- 在html中使用for时函数调用两次
- Javascript.html,可以'不要在一个输入中写两次
- 通过点击输入框两次它's正在打印它'输入框中有自己的html代码
- 一次加载两个HTML文档(从字符串加载iframe内容)
- 简单的Javascript对html文本框转换.不能工作两次
- jQuery -两次使用相同的HTML会使我的脚本失效
- PHP Ajax返回HTML两次
- Javascript将列表填充到html中,选择重复列表两次
- 我如何在一个网站上显示相同的HTML 5视频两次而不加载它两次
- HTML/JS中的弹出窗口只需点击两次即可弹出
- 按两次HTML表单按钮打开新页面
- Python / AJAX / JavaScript - 在GET期间打印两次HTML页面