我通过这些模式验证输入字段:
这些验证符合我的代码要求。甚至还有更好的方法来编写此验证代码。但是无论如何-我现在无法解决的问题是-如果我输入一个值,例如99.99或100或23.23,并且我想通过使用鼠标选择/标记整个值来再次更改该值-它不会改变!如果我写2.33,然后用鼠标选择/标记整个值,它将改变。因此,看来我正面临一种“假”状态,该状态不允许我输入其他数字,现在我找不到一种检测到我在输入字段中选择了某项内容的事件。
我准备了JSFIDDLE代码-我在哪里感到困惑?
ps:我也知道,也许我的按键事件正在覆盖错误/真实状态,之后我试图解决这个问题。
非常感谢! 最好的问候
$('#inpNumber').on('input', function() {
var inpVal = $(this).val();
if ( inpVal > 100 || inpVal < 0 || !inpVal) {
$( "#inpNumber" ).removeClass( "is-valid" );
$( "#inpNumber" ).addClass( "is-invalid" );
} else {
$( "#inpNumber" ).removeClass( "is-invalid" );
$( "#inpNumber" ).addClass( "is-valid" );
}
});
$('#inpNumber').keypress(function (event) {
var input = $(this).val();
if ((input.indexOf('.') != -1) && (input.substring(input.indexOf('.')).length > 2)) {
event.preventDefault();
return false;
}
return isNumberRegChecked(event, this);
return isNumber(event, this);
});
function isNumberRegChecked( evt, element ) {
var inpVal = $(element).val();
// ^(\d\d?(\.\d\d?)?|100(\.00?)?)$ also possible
var checkShare = /^(\d{0,2}(\.\d{0,2})?)$/.test(inpVal);
if (checkShare == false)
return false;
return true;
}
// THE SCRIPT THAT CHECKS IF THE KEY PRESSED IS A NUMERIC OR DECIMAL VALUE.
function isNumber( evt, element ) {
var charCode = (evt.which) ? evt.which : event.keyCode;
if ((charCode != 46 || $(element).val().indexOf('.') != -1) && // “.” CHECK DOT, AND ONLY ONE.
(charCode < 48 || charCode > 57))
return false;
return true;
}