我有一个非常简单的JS代码 - 目的是用'实时'中的一个期限替换逗号(即用户输入)。例如,当用户类型为:43,65时,应自动校正为:43.65等:
<input onkeyup="this.value=this.value.replace(',','.')" type="number">
但它不起作用(至少在Firefox中) - 当我输入一些数字并添加逗号时,数字会完全消失。当我键入A期间时,将其删除。因此它根本无法正常工作...
我也尝试了:
<input onkeyup="this.value=this.value.replace(/,/g, '.')" type="number">
,但它也不起作用...
是可能的,但仅在input
类型text
上。input
类型number
不允许除数字以外的任何其他符号。
var input = document.getElementById('input');
function validate(){
input.value = input.value.replace(/,/g, ".");
}
<input onkeyup="validate()" type="text" id='input'>
尝试以下代码
function numbersOnly(event) {
var key = event.keyCode;
return ((key >= 96 && key <= 105) || (key >= 48 && key <= 57) || key == 188 || key==46 || key==8);
};
<input onkeydown="return numbersOnly(event)" onkeyup="this.value=this.value.replace(',','.')" type="text">
进一步解释这里发生了什么;如果用户将数字或小数以外的任何内容输入到类型编号<input type="number">
的输入中,则值将自动为空。这就是为什么您无法按照所需的方式在输入类型编号上操作。如果您想实现自己设定的操作,则需要使用输入类型文本<input type="text">
并编写几个JavaScript函数来创建所需的效果。
function replace(element) {
// set temp value
var tmp = element.value;
// replace everything that's not a number or comma or decimal
tmp = tmp.replace(/[^0-9,.]/g, "");
// replace commas with decimal
tmp = tmp.replace(/,/, ".");
// set element value to new value
element.value = tmp;
}
<input id='numberInput' onkeyup="replace(this)" type="text">
此代码应该让您开始使用一个类型文本的输入框,该框将排除数字和小数以外的任何内容,同时将任何逗号转换为小数。
如果要在输入框的正确部分保留一个计数器,则需要添加两个按钮;增量器和减少器以及将文本输入的输入值转换为double&amp;的函数根据按下哪个按钮,将增加或减小双重。如果您在这一部分方面遇到麻烦,我建议您发布另一个问题。
函数要在文本框中添加逗号:
function Comma1(Num) {
Num += '';
Num = Num.replace(',', ''); Num = Num.replace(',', ''); Num = Num.replace(',', '');
x = Num.split('.');
x1 = x[0];
x2 = x.length > 1 ? '.' + x[1] : '';
var rgx = /(d+)(d{4})/;
while (rgx.test(x1))
x1 = x1.replace(rgx, '$1' + ',' + '$2');
return x1 + x2;
}
我认为这对您有帮助