0

我有这个 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”按钮!我喜欢允许。

我怎样才能做到这一点?

4

3 回答 3

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)"/>
于 2012-12-06T17:43:27.627 回答
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;
        }
    }
}
于 2012-12-06T17:36:25.473 回答
0

我更喜欢在这里使用的方法(更简洁的代码,更简单的逻辑)是使用 html5 属性(type="number"或者pattern="[0-9]*"会很好用)。

请参阅在 input type="number" 上禁用 webkit 的旋转按钮?如果您决定使用<input type="number">并想要禁用微调器。

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

于 2012-12-06T17:41:10.047 回答