Javascript 小数点后允许有2位数字
您好,我正在尝试限制用户在小数点后输入2位数字。下面的功能正在工作,但我无法修改最后两位数字。假设我输入了数字3456.78,我想修改3456.68,这是不允许的Javascript 小数点后允许有2位数字,javascript,jquery,Javascript,Jquery,您好,我正在尝试限制用户在小数点后输入2位数字。下面的功能正在工作,但我无法修改最后两位数字。假设我输入了数字3456.78,我想修改3456.68,这是不允许的 $('.PMT_AMT')。按键(功能(事件){ var$this=$(this); if((event.which!=46 | |$this.val().indexOf('.')!=-1)&& ((event.which57)&& (event.which!=0&&event.which!=8))){ event.preventD
$('.PMT_AMT')。按键(功能(事件){
var$this=$(this);
if((event.which!=46 | |$this.val().indexOf('.')!=-1)&&
((event.which<48 | | event.which>57)&&
(event.which!=0&&event.which!=8))){
event.preventDefault();
}
var text=$(this.val();
if((event.which==46)和&(text.indexOf('.')==1)){
setTimeout(函数(){
if($this.val().substring($this.val().indexOf('.')).length>3){
$this.val($this.val().substring(0,$this.val().indexOf('.')+3));
}
}, 1);
}
if((text.indexOf('.')!=-1)&&
(text.substring(text.indexOf('.')).length>2)&&
(event.which!=0&&event.which!=8)&&
($(此[0].selectionStart>=text.length-2)){
event.preventDefault();
}
});代码>
这里有一种可能使用正则表达式。在按键上保存旧的输入值,如果按键上的新值无效,则重置为该旧值
您还需要在keypress
上进行验证,否则,如果用户键入速度非常快,则可能会保存无效值:
const re=/^\d+(\.\d{0,2})?$/;
让奥德瓦尔;
$('.PMT_AMT')。按键(功能(事件){
常量{value}=这个;
如果(重新测试(值))oldVal=值;
});
$('.PMT_AMT').keyup(函数(事件){
const newVal=this.value;
如果(!re.test(newVal))此.value=oldVal;
});代码>
此解决方案创建一个预测,并针对该预测测试正则表达式
$('.PMT_AMT')。按键(功能(事件){
如果(!/^\d*(\.\d{0,2})?$/.test(
this.value.slice(0,this.selectionStart)
+String.fromCharCode(event.which)
+this.value.slice(this.selectionEnd)
))event.preventDefault();
});代码>
为什么要使用jQuery而不仅仅是浏览器功能
<input type="number" step="0.01">
在提交时,浏览器将检查输入字段的提交值是否最多有两位小数。请创建一个。为什么不使用Regex,为什么使用设置超时
?天啊,这里肯定有一些奇怪的代码。对于你想要做的事情来说,这个看起来很复杂。正则表达式绝对是最好的选择。一种可能性: