如何检测 JavaScript 中的 CapsLock 和其他非字母数字特殊修饰键?

How to detect CapsLock and other non-alphanumeric special modifier keys in JavaScript?

不使用 altKeyshiftKeyctrlKey 是否可以检测到它们,包括 CapsLock TabSpace ?

这是一种有趣的方法,您可以通过这种方法找出在 JavaScript 中按下了哪个键。这很有帮助

  • 根据按下的键触发一个动作。
  • 通过创建缩进而不是切换焦点来防止 Tab 剧透
  • 查看 Caps Lock 是否打开。可以通知用户,尤其是在填写表单字段时。
  • 使用箭头键进行导航等。

这是 JavaScript 代码:-

    window.addEventListener("keypress", function(e){
         console.log(e.keyCode);
    });

    window.addEventListener("keydown", function(e){
         if(e.keyCode==9)       
         {   
              console.log("You Pressed Tab");
              e.preventDefault();
         }
    });

    window.addEventListener("keyup", function(e){
        var keyPressed; 
        switch(e.keyCode)
        {
            case 9: return;   // already handled above
            case 18: keyPressed="Alt"; e.preventDefault(); break;
            case 20: keyPressed="Caps Lock"; break;
            case 17: keyPressed="Ctrl"; break;
            case 16: keyPressed="Shift"; break;
            case 37: keyPressed="Left A"; break;
            case 38: keyPressed="Top A"; break;
            case 39: keyPressed="Right A"; break;
            case 40: keyPressed="Bottom A"; break;
            default: keyPressed=e.keyCode;
        }
        console.log("You pressed "+keyPressed);
    });

switch case 构造不在 keydown 处理程序中的原因是因为我个人不喜欢在按住键时多次执行处理程序。当然,可以将更多键添加到 switch 案例中。 另请注意 Tabkeydown 下。这是因为Tab是在按键按下时触发的。如果它被放在 keyup 下,keypress 处理程序就不会被触发,从而改变 window 焦点,并使 keyup 处理程序无用。 preventDefault() 防止 TabAlt 改变焦点。
该代码只是一个示例,请根据需要进行更改。