在Javascript中将文本框限制为两位小数

在Javascript中将文本框限制为两位小数,javascript,jquery,validation,Javascript,Jquery,Validation,我试图使用JavaScript将文本框限制为两位小数。该字段也不能以句点开头 jQuery.fn.ForceCurrencyOnly = function () { return this.each(function () { $(this).keypress(function () { //Only allow period and numbers if ((event.which != 46 || $(this).val().indexOf('.')

我试图使用JavaScript将文本框限制为两位小数。该字段也不能以句点开头

jQuery.fn.ForceCurrencyOnly = function () {
return this.each(function () {
    $(this).keypress(function () {

        //Only allow period and numbers
        if ((event.which != 46 || $(this).val().indexOf('.') != -1) && (event.which < 48 || event.which > 57)) {
            event.preventDefault();
        }

        //Prevent a period being entered first
        else if (event.which == 46 && $(this).val().length == 0) {
           event.preventDefault();
        }

        //Only two numbers after a decimal
        else if (($(this).val().indexOf('.') != -1) && ($(this).val().substring($(this).val().indexOf('.'), $(this).val().indexOf('.').length).length > 2)) {
           event.preventDefault();
        }
    });
});
jQuery.fn.ForceCurrencyOnly=函数(){
返回此。每个(函数(){
$(此).keypress(函数(){
//只允许句号和数字
if((event.which!=46 | | |$(this.val().indexOf('.')!=1)和&(event.which<48 | | event.which>57)){
event.preventDefault();
}
//防止先输入句点
else if(event.which==46&&$(this.val().length==0){
event.preventDefault();
}
//小数点后只有两个数字
else if($(this.val().indexOf('.')!=-1)和($(this.val().indexOf('.'))子字符串($(this.val().indexOf('.'),$(this.val().indexOf('.').length).length>2)){
event.preventDefault();
}
});
});
})

以上限制输入数字、单个句点和最多两位小数。我的问题是,一旦输入100.00,该值就无法突出显示并用数字删除。它必须被删除

有没有一种更简单的方法只允许货币有两位小数


感谢您的帮助。

应用正则表达式验证如何:

<input type="text" pattern="^[0-9]*\.[0-9]{2}$" />


希望这有帮助

只需在最终检查中检查输入的键是否不是退格键

jQuery.fn.ForceCurrencyOnly = function() {
    return this.each(function() {
        $(this).keypress(function(event) {


             console.log(event.which);
             //Only allow period and numbers
             //Only allow period and numbers
             if (event.which != 8 && (event.which != 46 || $(this).val().indexOf('.') != -1) && (event.which < 48 || event.which > 57)) {
             event.preventDefault();
             }

             //Prevent a period being entered first
             else if (event.which == 46 && $(this).val().length == 0) {
             event.preventDefault();
             }

             //Only two numbers after a decimal
             else if ( event.which != 8 && (event.which < 48 || event.which > 57) && ($(this).val().indexOf('.') != -1) && ($(this).val().substring($(this).val().indexOf('.'), $(this).val().indexOf('.').length).length > 2)) {
             event.preventDefault();
             }

        });
    });
};
jQuery.fn.ForceCurrencyOnly=函数(){
返回此值。每个(函数(){
$(此).keypress(函数(事件){
console.log(event.which);
//只允许句号和数字
//只允许句号和数字
if(event.which!=8&&(event.which!=46 | | |$(this.val().indexOf('.')!=-1)&(event.which<48 | | event.which>57)){
event.preventDefault();
}
//防止先输入句点
else if(event.which==46&&$(this.val().length==0){
event.preventDefault();
}
//小数点后只有两个数字
else如果(event.which!=8&&(event.which<48 | | event.which>57)&($(this.val().indexOf('.')!=-1)&($(this.val().indexOf('.'),$(this.val().indexOf('.').length.)子字符串($(this.val().indexOf('.'))).length>2)){
event.preventDefault();
}
});
});
};
试试这个: 现场演示:


HTML:

然后,使用
.blur(..)

只需知道,如果您输入类似于20.129,您的文本框值将是20.13(这意味着该值将被舍入)

我已经测试了许多可能的情况,效果很好,也许您可以根据需要自定义
函数以用于其他目的。

试试这个

$("#YourtxtId").keypress(function () {
var txt = $("#YourtxtId").val();
if (txt.indexOf(".") > -1 && txt.split(".")[1].length > 1) {
var substr = txt.split(".")[1].substring(0, 1);
$("#YourtxtId").val(txt.split(".")[0] + "." + substr);
}
jQuery.fn.getNum = function() {
var val = $.trim($(this).val());
if(val.indexOf(',') > -1) {
    val = val.replace(',', '.');
}
var num = parseFloat(val);
var num = num.toFixed(1);
if(isNaN(num)) {
    num = '';
}
return num;
}

$(function() {

$('#txt').keyup(function() {
    $(this).val($(this).getNum());
});

});

编辑了我的答案。如果您使用的是html5,它应该可以工作。按delete可以很好地删除输入。我希望能够通过突出显示100.00并输入1(例如)来删除输入。这就是我通常清除字段的方式。@ministrymason更新了代码,以便在突出显示输入并按下数字键时进行检查。如果检查js fiddle链接并发现它也在使用alpha?@Thomas您能提供一个示例吗?
$(function() { //onReady handler for document

    $('#txt').blur(function() { //onBlur handler for textbox
        $(this).val($(this).getNum()); //invoke your function, you can use it with other selectors too
    });

});
$("#YourtxtId").keypress(function () {
var txt = $("#YourtxtId").val();
if (txt.indexOf(".") > -1 && txt.split(".")[1].length > 1) {
var substr = txt.split(".")[1].substring(0, 1);
$("#YourtxtId").val(txt.split(".")[0] + "." + substr);
}
jQuery.fn.getNum = function() {
var val = $.trim($(this).val());
if(val.indexOf(',') > -1) {
    val = val.replace(',', '.');
}
var num = parseFloat(val);
var num = num.toFixed(1);
if(isNaN(num)) {
    num = '';
}
return num;
}

$(function() {

$('#txt').keyup(function() {
    $(this).val($(this).getNum());
});

});