javascript - 按键事件中的数字验证以及小数点

标签 javascript

我正在对数字进行验证,但情况除外。我正在按键事件中进行验证。

这是我如何进行验证的过程..

输出长度=整数+小数

示例:积分 = 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/

相关文章:

javascript - 部署到多个 subURI 时使用 Rails 的 jQuery

javascript - 动态创建的脚本不起作用

javascript - Firefox 中 setTimeout 传递的神秘参数

javascript - 根据 mongodb 集合数组验证数组

javascript - 如何更改网站上的滚动行为(例如速度、加速度)?

javascript - 为什么有时在 setState 之后立即调用 render 而有时不调用

javascript - 区分 +0 和 -0

javascript - 使用 require.js 在 Web Worker 中加载 JQuery

JavaScript 正则表达式 : how to not capture an optional string on the right side

javascript - FabricJS:无法克隆对象或图像,因为它们未定义