仅允许数字输入

时间:2012-12-06 17:32:23

标签: javascript

我有这个javascript代码只允许在文本框上输入数字

    function CheckNumeric(e) {

        if (window.event) // IE 
        {
            if ((e.keyCode < 48 || e.keyCode > 57) & e.keyCode != 8) {
                event.returnValue = false;
                return false;
            }
        }
        else { // Fire Fox
            if ((e.which < 48 || e.which > 57) & e.which != 8) {
                e.preventDefault();
                return false;
            }
        }
    }

问题是它也阻止了“TAB”按钮!我想允许它。

我希望你能帮助我做到这一点。

3 个答案:

答案 0 :(得分:2)

我会将CheckNumeric函数更改为这样的函数并使用正则表达式来确定有效/无效的输入。 /[0-9\t\b]+/匹配数字,标签和退格。如果您还想允许空格更改为/[0-9\t\b\s]+/

function CheckNumeric(e)
{
    var charCode = e.charCode || e.keyCode;
    var character = String.fromCharCode(charCode);
    if(!character.match(/[0-9\t\b]+/))
    {
        if(window.event)
            event.returnValue = false;
        else
            e.preventDefault();
        return false;
    }
    return true;
}

此外,为了正确捕获密钥代码,您应该绑定到onKeyPress事件而不是onKeyDown,因为它不会为数字小键盘提供正确的密钥代码。

<input type="text" onkeypress="CheckNumeric(event)"/>

答案 1 :(得分:0)

KeyCode 8用于退格。我不知道你是否错误添加:

function CheckNumeric(e) {

    if (window.event) // IE 
    {
        if ((e.keyCode < 48 || e.keyCode > 57) & e.keyCode != 8 & e.keyCode != 9) {
            event.returnValue = false;
            return false;
        }
    }
    else { // Fire Fox
        if ((e.which < 48 || e.which > 57) & e.which != 8  & e.which != 9) {
            e.preventDefault();
            return false;
        }
    }
}

答案 2 :(得分:0)

我更喜欢在这里使用的方法(更简洁的代码,更简单的逻辑)是使用html5属性(type="number"pattern="[0-9]*"可以正常工作)。

如果您决定使用<input type="number">并想要停用微调器,请参阅Disable webkit's spin buttons on input type="number"?

如果您确实需要支持具有此行为的旧浏览器,请考虑使用支持html5表单属性的填充程序。