我的代码确保它只接受十进制前的3个数字和十进制后的3个数字以及仅一个小数。
有一种情况不起作用。
示例:
如果我键入12.123然后返回并键入12w.123,它将接受" w"并删除最后一个数字3.它知道它与JavaScript拆分有关。
有谁知道如何解决这个问题?
$('.numeric-decimal-63').on('input', function (event) {
var val = $(this).val();
var regex1 = new RegExp(/^(\d{1,3}|\d{0,3}\.\d{0,3})$/g);
var regex2 = regex1.test(val);
if (!regex2){
$(this).val(val.slice(0,-1));
}
});
答案 0 :(得分:1)
绝对肯定永远不会直接阻止用户输入。这就是原因:
让我们说我打字了。 1 , 3 , w 哎呀,手指滑了,没问题:←Backspace , 2 那里。现在让我们看......嗯?为什么文本框只显示12
?在3
去哪儿?
相反,允许用户键入他们想要的内容,并且只有在输入完成后(例如,在change
事件上),您应该验证输入并通知用户它是否不合规。
HTML5为您完成此任务:
<input type="number" min="0" max="999.999" step="0.001" />
答案 1 :(得分:0)
$(this).val(val.slice(0,-1));
将删除最后一个键,因此“123w1”将删除“1”。您可能想要回到之前的状态:
var state="0";
$('.numeric-decimal-63').on('input', function (event) {
var val = $(this).val();
var regex1 = new RegExp(/^(\d{1,3}|\d{0,3}\.\d{0,3})$/g);
if (!regex1.test(val) && val!==""){
$(this).val(state);
return;
}
state=val;
});