到目前为止,我的代码可以正常使用,但是设置了两个小数后我都无法输入任何数字。 知道怎么了吗?
$("input").keypress(function(e) {
var el = $(this);
var key = e.keyCode || e.which;
key = String.fromCharCode(key);
var value = el.val() + key;
var regex = /^\d+(,\d{0,2})?$/;
if (!regex.test(value)) {
e.returnValue = false;
if (e.preventDefault) e.preventDefault();
}
});
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
<input type="text" value="1234,56">
答案 0 :(得分:2)
您的代码还将拒绝退格键,删除键和箭头键,这将使用户几乎无法更正已经存在的数字。
我建议不要响应keypress
,而应响应input
事件,因为它还会触发通过鼠标(在文本中拖动),上下文菜单(清除,粘贴)进行更改的时间。 )或其他输入设备。
区别在于input
在进行更改后触发,但这还不错。您可以删除输入中不适合正则表达式的部分:
$("input").on('input', function(e){
var clean = $(this).val().replace(/^(\d+(,\d{0,2})?)?.*/g, "$1");
$(this).val(clean);
});
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
<input type="text" value="1234,56">
以上解决方案删除了字符违反模式后的其余输入。如果您想保留尽可能多的输入字符,可以执行一个循环,一次只删除一个违规字符:
$("input").on('input', function(e){
var clean = $(this).val(), input;
while (input != clean) {
input = clean;
clean = input.replace(/^(\d+(,\d{0,2})?)?.?/g, "$1");
}
$(this).val(clean);
});
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
<input type="text" value="1234,56">