javascript - 防止用户在小数点前 2 位数字后输入更多数字

标签 javascript jquery validation numeric

我在让用户在具有相同类别的文本框中输入数值时遇到问题。

我想要什么:

  • 允许用户仅输入小数点前 2 个数字和小数点后 2 个数字;否则,除了箭头键、退格键和删除键之外,所有键都会被记录

当前问题

  • 用户只能输入 2 个数字;但是,在他/她添加小数点后,他们可以在其前面添加更多数字
  • 目前,用户只能输入 5 位数字 - 小数点前 2 位,小数点后 2 位。当他们删除小数点后一位数字时,他们仍然可以在该小数点之前添加更多数字。

我的 HTML:

<form method="post">
    <div class="row">
        <label>Val 1</label>
        <input type="text" class="validate" name="val1" maxlength="5" />
    </div>
    <div class="row">
        <label>Val 2</label>
        <input type="text" class="validate" name="val2" maxlength="5" />
    </div>
    <div class="row">
        <label>Val 3</label>
        <input type="text" class="validate" name="val3" maxlength="5" />
    </div>
    <div class="row">
        <button type="submit">Send</button>
    </div>
</form>

我的JS:

Number.prototype.between  = function (a, b, inclusive) {
        var min = Math.min.apply(Math, [a,b]),
            max = Math.max.apply(Math, [a,b]);
        return inclusive ? this >= min && this <= max : this > min && this < max;
    };  
$('.validate').keypress( function( event ) {
        var v = parseFloat($(this).val() + String.fromCharCode(event.which));

        textValue = parseFloat(v).toString();
        var newVal = parseInt( textValue.substr(0, textValue.indexOf(".")) );

        console.log(newVal);
        if(textValue.length < 6){
           if(!parseFloat(v).between(0,99.99,true)) {
                v = this.value.substring(0, 2);
                $(this).val(v);
                return false;
            } 
            return true;
        }
    });

这是我的 fiddel DEMO 的链接

最佳答案

试试这个:

   <input type="text" class="validate" name="val1" maxlength="5" onkeypress="return CheckDecimalValues(event)" />

function CheckDecimalValues(evt) {
    var keyCode = evt.keyCode ? evt.keyCode : ((evt.charCode) ? evt.charCode : evt.which);
    //    8   Backspace
    //    9   Tab key 
    //    46  Delete
    //    35  End Key
    //    36  Home Key
    //    37  Left arrow Move
    //    39  Right arrow Move
    if (!(keyCode >= 48 && keyCode <= 57)) {
        if (!(keyCode == 8 || keyCode == 9 || keyCode == 35 || keyCode == 36 || keyCode == 37 || keyCode == 39 || keyCode == 46)) {
            return false;
        }
        else {
            return true;
        }
    }

    var velement = evt.target || evt.srcElement
    var fstpart_val = velement.value;
    var fstpart = velement.value.length;
    if (fstpart .length == 2) return false;
    var parts = velement.value.split('.');
    if (parts[0].length >= 14) return false;
    if (parts.length == 2 && parts[1].length >= 2) return false;
}

关于javascript - 防止用户在小数点前 2 位数字后输入更多数字,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19020607/

相关文章:

javascript - 更改 Controller 中的范围变量不会更改 View 中的变量

JavaScript 强制视频在移动设备上自动播放

javascript - TypeError : state. categoriesState.push 不是函数VUEX

javascript - onkeyup 激活很多ajax请求

jquery - 如何在网站可见时触发动画?

java - 如何在 Struts 2 中正确验证字段

php - 仅正整数的正则表达式是什么? (零是不允许的)

javascript - 将 XML 解析为 JSON 时遇到问题 - Javascript

jquery - 使用 jquery animate 独立动画多个 div

vb.net - WCF 和验证应用程序 block : Impossible to customize error messages?