【问题标题】:Check if Shift + letter is pressed in JS / Vue 2检查是否在 JS / Vue 2 中按下了 Shift + 字母
【发布时间】:2026-01-15 03:10:01
【问题描述】:

有没有办法检查 lodash 的 debounce 中是否按下了 Shift + 字母?

fetchDebounced: _.debounce(function(e) {
  if (e.keyCode === 16 && e.keyCode >= 46 && e.keyCode <= 90) {
    console.log('shift + letter is pressed')
  }
}

在我的情况下不起作用,在 keyup 事件中使用它。我想打印控制台消息,只有当 SHIFT+LETTER 时,例如按下 Shift+a(或 Shift+z)。有可能吗?

【问题讨论】:

  • 如果它总是“不起作用”,它很容易解决。如果没有,你能解释一下它什么时候“不起作用”吗?
  • 你用的是什么监听器,我忘记了,但是有特定的方法可以添加监听器来查看两个按钮是否同时按下。
  • 这是重复的。见*.com/questions/7479307/…
  • 您的条件失败,因为keyCode 不能同时介于 46-90 之间。尝试使用 shiftKey 属性而不是检查 shift keyCode

标签: javascript vue.js


【解决方案1】:

你可以使用 onkeydown 和 e.shiftKey:

document.onkeydown = function(e) {
  if (e.shiftKey && e.keyCode >= 46 && e.keyCode <= 90) {
    console.log("SHIFT + " + e.keyCode);
    return false;
  }
}

【讨论】:

  • 我的问题是使用 keyup 而不是 keydown 这就是为什么我的 shiftKey 从来都不是真的。
【解决方案2】:

根据this answer

event.shiftKey 是一个布尔值。 true 如果 Shift 键被按下,false 如果不是。 altKeyctrlKey 工作方式相同。

所以基本上你只需要使用onkeydown 正常检测keydown,并根据需要检查这些属性。

【讨论】:

  • 本例中的event 是什么? console.log(event) 为我输出 undefined
【解决方案3】:

为了达到预期的效果,请使用以下选项,即在 65-90(A-Z) 之间使用 shiftkey press 和 keyCode check 来跟踪一个事件

function checkCode(e) {
    if(e.shiftKey){
    console.log(e.shiftKey && (e.keyCode >= 65 || e.keyCode <= 90))      
    }
}
&lt;input onkeyup = "checkCode(event)" /&gt;

codepen - https://codepen.io/nagasai/pen/NVqMOg

【讨论】:

    【解决方案4】:

    因为有人在回答,这是this previously-asked question的最佳回答。

    ...onkeyup = function(e) {
        if (e.keyCode == 13)
        {
    //      if (e.shiftKey === true)
            if (e.shiftKey)  // thruthy
            {
                // new line
            }
            else
            {
                // run your function
            }
            return false;
        }
    }
    

    另请注意上面Das_Geek 的回答,altKeyctrlKey 的工作方式相同,根据可敬的Niet the Dark Absol

    【讨论】: