我正在对数字进行验证,但情况除外。我正在按键事件中进行验证。
这是我如何进行验证的过程..
输出长度=整数+小数
示例:积分 = 5,小数 = 3
如果用户输入五位数字,则不允许输入第 6 位数字。 (即 12345)。 但如果他输入“.”然后在允许 3 位小数(即 12345.678)之后。这是完美的工作。
我正面临以下情况的问题。
如果用户输入 1.234,那么他将导航到“.”之前使用箭头或鼠标单击放置,然后用户无法输入另一个数字。因为我正在检查整数部分或小数部分与长度匹配,所以我返回 false。
谁能帮我解决这个问题。我可以处理按键事件,但我试图仅通过按键事件来实现。有什么方法可以获取用户输入数字的位置,如果是,那么我可以获得一个解决方案。
var integral = 5, decimals = 3;
//below code in the key press event
if ([8, 9, 13, 37, 39,46].indexOf(e.keyCode) != -1) {
return true;
} else if (e.keyCode == 190 && !e.shiftKey && decimals) {
_value = $(this).val();
if (_value.indexOf('.') != -1) {
return false;
}
return true;
} else if (48 >= e.keyCode || e.keyCode <= 57) {
_value = $(this).val();
if (decimals) {
_value = _value.split('.');
if (_value[0].length == integral || (_value[1] || '').length == decimals) {
return false;
}
return true;
} else {
if (_value.length == integral) {
return false;
}
return true;
}
}
return false;
最佳答案
我使用 selectionEnd
获取用户输入数字的位置。我用它做到了。
var evt = e.target || e.srcElement;
_value = $(evt).val();
if ([8, 9, 13, 37, 39, 46].indexOf(e.keyCode) != -1) {
return true;
}
else if (e.keyCode == 190 && !e.shiftKey && decimals) {
if (_value.indexOf('.') != -1) {
return false;
}
return true;
}
else if (48 >= e.keyCode || e.keyCode <= 57) {
if (decimals) {
var isHavingDot = false;
var dotPosition = '';
if (_value.indexOf('.') != -1) {
isHavingDot = true;
dotPosition = _value.indexOf('.')
}
var length = _value.length;
if (isHavingDot) {
_value = _value.split('.');
if (evt.selectionEnd <= dotPosition) {
if (_value[0].length >= integral) {
return false;
}
}
else if ((_value[1] || '').length >= decimals) {
return false;
}
}
else {
if (_value.length >= integral) {
return false;
}
}
return true;
}
else {
if (_value.length == integral) {
return false;
}
return true;
}
}
return false;
关于javascript - 按键事件中的数字验证以及小数点,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37256943/