在按键上获取新的输入值

时间:2017-05-06 09:57:53

标签: javascript jquery validation

我想将带有浮点值的文本输入字段限制为2位小数。我使用了keyup事件:JSFiddle

$("body").keyup(function(e) {
    if ($(e.target).attr("id") == "number") {
        var value = $("#number").val();
        var decimalPointPosition = value.indexOf(".");
        if (decimalPointPosition >= 0) {
            var decimalCount = value.substring(decimalPointPosition + 1).length;
            if (decimalCount >= 2) {
                $("#number").val(value.substring(0, value.length - (decimalCount - 2)));
            }
        }
    }
});

但缺点是,这种解决方案的“闪烁”。因此,如果我键入第3个十进制数字,它首先显示第3个数字,然后再次将其删除,因此看起来不太好。 当使用按键事件时,我没有inout字段的新值只是事件中的新键。无论如何将输入值限制为除了keyup事件之外的2位十进制数字吗?

由于

哈德

2 个答案:

答案 0 :(得分:0)

我认为这是唯一的方法..

https://jsfiddle.net/yhb3d0hr/

$("body").keypress(function(e) {
    if ($(e.target).attr("id") == "number") {
        var value = $("#number").val();
        var decimalPointPosition = value.indexOf(".");
        if (decimalPointPosition >= 0) {
            var decimalCount = value.substring(decimalPointPosition).length;
            if (decimalCount >= 2) {
                $("#number").val(value.substring(0, value.length - (decimalCount - 2)));
            }
        }
    }
});

答案 1 :(得分:0)

我正在尝试多一点,关键点是获得光标位置,使用光标位置和输入的字符,可以“预测”输入的输入值。 所以在我的情况下,当输入已经输入2个十进制数字时,我不允许更多的十进制数字,但是可以在小数点之前添加数字。 JsFiddle:https://jsfiddle.net/nu73zxys/4/

$("#number").keypress(function(e) {
var value = $("#number").val();
if (e.which >= 48 && e.which <= 57) {
    var decimalPointPosition = value.indexOf(".");
    if (decimalPointPosition >= 0) {
        var decimalCount = value.substring(decimalPointPosition + 1).length;
        if (decimalCount == 2 && $("#number").getCursorPosition() > decimalPointPosition) {
                e.preventDefault();                     
            }
    }
}   

});