繁体   English   中英

jQuery keydown仅用于数字

[英]jquery keydown for only digits

我有一个用于付款的输入框,我只允许输入x.xx之类的数字,当然xxxx.x还是可以使用xxxxx

我的安装程序几乎可以正常工作,而不会有一些奇怪的行为。 如果小数点后的数字1和2可以是2位数字(有效),但是如果我按3-9,则它只允许该数字之一。 也可以无限地允许小数点右边的0。

我正在与这一起工作。 我也只允许输入按钮,当它被按下然后运行一个功能

$('#money-button-input-box').keydown(function(event) {
    var str = $(this).val()

    if(str.length >= 1){
        var rightHalf = str.split('.')[1];
        if(rightHalf >= 3 && event.keyCode != 8 ){
            event.preventDefault();
        }
    }

    if( (event.keyCode == 190 || event.keyCode == 110) && str.replace(/[^.]/g, "").length >= 1 ){
        event.preventDefault();
    }
    allowOnlyNumbers(event);

    if (event.keyCode == 13) {
        if($(this).val() == '')return;
        enterPayment($(this));
    }
});

和功能

function allowOnlyNumbers(events){
    // Allow: backspace, delete, tab, escape, and enter
    if ( events.keyCode == 46 || events.keyCode == 8 || events.keyCode == 9 || events.keyCode == 27 || events.keyCode == 13 || 
    // allow decimals
    events.keyCode == 190 || events.keyCode == 110 || 
    // Allow: Ctrl+A
    (events.keyCode == 65 && events.ctrlKey === true) || 
    // Allow: home, end, left, right
    (events.keyCode >= 35 && events.keyCode <= 39)) {
    // let it happen, don't do anything
        return;
    } else {
        // Ensure that it is a number and stop the keypress
        if (events.shiftKey || (events.keyCode < 48 || events.keyCode > 57) && (events.keyCode < 96 || events.keyCode > 105 )) {
            events.preventDefault(); 
        }   
    }
}

http://jsfiddle.net/Qxtnd/

小数的问题是因为您正在使用

rightHalf >= 3

它评估实际数字而不是长度,因为javascript将其类型转换为数字以进行比较。 您想要的是位数,请尝试

rightHalf.toString().length >= 2

在这里提琴http://jsfiddle.net/Qxtnd/1/

编辑

只要rightHalf是一个字符串,您就可以执行以下操作:

rightHalf.length >= 2

如果rightHalf是一个数字,那么您将获得一个例外。

function isNumberKeyUp(event, obj, beforeLength, afterLength) {
    var text = document.getElementById(obj).value;
    var splitText = text.split('.');
    if (splitText.length > 1 && splitText[1].length > afterLength) {
        document.getElementById(obj).value = splitText[0] + "." + splitText[1].substring(0,2);
        return false;
    }
    return true;
}

function isNumberKey(event, obj,beforeLength,afterLength) {
    var keyCode1 = event.keyCode;

    var keyCode = 0;
    if (keyCode1 == 0)
        keyCode = event.which;
    else {
        keyCode = keyCode1;
    }

    if ((keyCode >= 48 && keyCode <= 57) || keyCode == 46 || keyCode == 13 || keyCode == 27 || keyCode == 127 ) {
        var text = document.getElementById(obj).value;
        if (keyCode == 46 && keyCode1 == 0) {
            if (text.toString().indexOf(".") != -1) {
                return false;
            }
        }
        if (keyCode == 46) {
            if (text.toString().indexOf(".") != -1) {
                return false;
            }
        }

        var splitText = text.split('.');
        if (splitText[0].length >= beforeLength) {
            if (keyCode == 46 && text.toString().indexOf(".") == -1) {
                return true;
            } else if (text.toString().indexOf(".") != -1)
            {
                return true;
            }
            return false;
        }
    }
    else {
        return GetDefault(event);
    }
    return true;
}

function GetDefault(event) {
    var keyCode = event.keyCode;
    if (keyCode == 0)
        keyCode = event.which;

    if (keyCode == 8 || keyCode == 9 || keyCode == 35 || keyCode == 36 || keyCode == 37 || keyCode == 38 || keyCode == 39 || keyCode == 40 || keyCode == 46 || keyCode == 118) {
        return true;
    }
    return false;
}

以下是调用此事件的html

<input type="text" onkeyup="return isNumberKeyUp(event,'txtID',9,2);" onkeypress="return isNumberKey(event,'txtID',9,2);" required="required"  id="txtID" maxlength="12" value="1.00" name="txtID">

这是FIDDLE

rightHalf.length >= 2
    $('#money-button-input-box').keyup(function () {
        $(this).val(FormatNumber($(this).val()));

    });

function FormatNumber(val){
    var split = val.split('.');
    if (split.length>1) return OnlyNumbersAllowed(split[0])+'.'+OnlyNumbersAllowed(split[1]);
    else return OnlyNumbersAllowed(split[0]);
}

function OnlyNumbersAllowed(val){
 return val.replace(/\D/g, '');
}

http://jsfiddle.net/Qxtnd/7/您可以轻松地将此正则表达式放在任何函数中,而不必编写现在的内容。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM