【问题标题】:Is the shiftkey held down in JavaScript在 JavaScript 中是否按住 shiftkey
【发布时间】:2012-05-22 20:59:59
【问题描述】:

我写了一个只允许输入数字的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。

如有任何帮助,我们将不胜感激。

提前致谢。

【问题讨论】:

  • 如果你在console.log中给出evt,你会看到shiftKey属性,如果按下shift键,它就会变成true

标签: javascript keypress keydown shift


【解决方案1】:

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

【讨论】:

  • keypress 已弃用。
【解决方案2】:

使用 event.key 代替 charCode没有更多的神奇数字!

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

Mozilla Docs

Supported Browsers

【讨论】:

    【解决方案3】:

    您可以使用以下方法检查是否按下了 shift 键:

    if(evt.shiftKey) {
     ...  //returns true if shift key is pressed
    

    【讨论】:

    • @Sajad,你没抓住重点。 'evt' 只是一个变量,在上面发布的问题的上下文中,我的回答中使用了'evt'。请参阅问题中的变量'evt',行 :: var evt = e ||窗口.事件;我希望你现在明白了。
    • 啊哈,我明白了,我没有阅读问题。抱歉 - 这也是奇怪,我使用了event,并且工作正常。
    • 因为event是一个对应最近事件的全局变量。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2022-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-09-03
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多