jquery keydown只有数字

时间:2013-06-18 09:15:35

标签: javascript jquery

我有一个用于付款的输入框,我想只允许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/

4 个答案:

答案 0 :(得分:0)

小数问题是因为你正在使用

rightHalf >= 3

评估实际数字&amp;不是它的长度,因为javascript类型 - 将其转换为数字进行比较。你想要的是数字位数,试试

rightHalf.toString().length >= 2

在此处http://jsfiddle.net/Qxtnd/1/

修改

只要 rightHalf 是一个字符串即可:

rightHalf.length >= 2

如果 rightHalf 是一个数字,你会得到一个例外。

答案 1 :(得分:0)

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">

答案 2 :(得分:0)

这是 FIDDLE

rightHalf.length >= 2

答案 3 :(得分:-1)

    $('#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/ 你可以轻松地将这个正则表达式放在任何函数中,而不是写下你现在拥有的函数。