7

我写了一个只允许输入数字的 JS 函数。该函数的副本如下:

function NumbersOnly(e) {
    var evt = e || window.event;
    if (evt) {
        var keyCode = evt.charCode || evt.keyCode;
        //Allow tab, backspace and numbers to be pressed, otherwise return false for everything.
        //(keyCode>=96 && keyCode<=105) are the numpad numbers        
        if ((keyCode >= 48 && keyCode <= 57) || (keyCode >= 96 && keyCode <= 105) || keyCode === 9 || keyCode === 8) {


        }
        else {

            evt.returnValue = false;
        }
    }
}

此功能适用于所有数字,但是当按住 shift 键并按下其中一个数字键时会出现问题。返回的值是数字上方的字符之一。因此,例如,如果我按住 shift 并按 7,则返回 '&' 但 keyCode 仍然是 55!我原以为会有所不同。

所以我的问题是如何检查shift键是否被按住。我尝试了以下检查,但这没有用:

    if (keyCode === 16) {
        evt.returnValue = false;
    }
    else {

        if ((keyCode >= 48 && keyCode <= 57) || (keyCode >= 96 && keyCode <= 105) || keyCode === 9 || keyCode === 8) {


        }
        else {

            evt.returnValue = false;
        }
    }

我正在使用 ASP.NET 4.0。

任何帮助将不胜感激。

提前致谢。

4

3 回答 3

15

您可以使用以下命令检查是否按下了 shift 键:

if(evt.shiftKey) {
 ...  //returns true if shift key is pressed
于 2012-05-15T11:02:46.577 回答
0

使用 keypress 来按住任何键而不是 keydown

于 2020-08-23T13:36:43.343 回答
0

使用event.key而不是charCode. 没有更多的神奇数字!

function onEvent(event) {
    const key = event.key; // "a", "1", "Shift", etc.
    if (isFinite(key)) { // Is number
        // Do work
    }
};

Mozilla 文档

支持的浏览器

于 2017-09-05T21:05:17.417 回答