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

时间:2014-05-09 14:51:36

标签: 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('.') != -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();
        }
    });
});

};

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

是否有更简单的方法只允许两位小数的货币?

任何帮助表示感谢。

5 个答案:

答案 0 :(得分:3)

试试这个:

现场演示: http://jsfiddle.net/oscarj24/8JEF9/


<强> HTML:

Number: <input type="text" id="txt" />

<强> jQuery的:

创建 jQuery function,以便始终获得预期格式的number

jQuery.fn.getNum = function() {

    /* trim the string value */
    var val = $.trim($(this).val());

    /* replace all ',' to '.' if present */
    if(val.indexOf(',') > -1) {
        val = val.replace(',', '.');
    }

    /* parse the string as float */
    var num = parseFloat(val);

    /* use two decimals for the number */
    var num = num.toFixed(2);

    /* check if 'num' is 'NaN', this will happen 
     * when using characters, two '.' and apply 
     * for other cases too.
     */ 
    if(isNaN(num)) {
        num = '';
    }

    return num;
}

然后,强制textbox使用value

获得预期的.blur(..)
$(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
    });

});

要知道,如果您输入 20.129 之类的内容,您的文本框值将为 20.13 (这意味着该值将被舍入)。

我已经测试了很多可能的情况并且工作正常,也许您可​​以根据自己的需要自定义function

答案 1 :(得分:0)

如何应用RegEx验证:

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

希望这有帮助!

答案 2 :(得分:0)

在最终检查中检查输入的密钥是否不是退格

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();
             }

        });
    });
};

答案 3 :(得分:0)

试试这个..

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());
});

});

答案 4 :(得分:-1)

$("#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);
}