按任意键除了

Press any key except

我正在尝试将我的 JavaScript 代码嵌入到 StoryLine Scorm 课程中。 如果用户单击“Alt”或“=”以外的任何键,我需要更改变量 KeyPressed_WrongKey

我的 JavaScript 代码如下所示。

var player = GetPlayer();
var isPressedCtrl = 0;
$(document).keyup(function (e) {
  if (e.which == 18) isPressedCtrl=0;  
  }).keydown(function (e) {
    if (e.which == 18) isPressedCtrl=1;
    if (e.which == 187 && isPressedCtrl == 1) {  
      player.SetVar("KeyPressed", 1); //run if Alt+= pressed 
    } 
    if (e.which != 187 || e.which != 18) {
      player.SetVar("KeyPressed_WrongKey", 1); //run if pressed anything else 
    }
  });

当我按下 Alt= 时,第二个 IF 也为真...

有人可以帮忙吗?

我如何更正脚本以按需要以外的任意键?

在最后,如果你得到一个真,因为 OR (||) 如果其中一个没有被按下。你可以这样做:

var player = GetPlayer();
var isPressedCtrl = 0;
$(document).keyup(function (e) {
  if(e.which == 18) isPressedCtrl=0;  
  }).keydown(function (e) {
    if(e.which == 18) isPressedCtrl=1; 
    if(e.which == 187 && isPressedCtrl == 1) {  
      player.SetVar("KeyPressed", 1); //run if Alt+= pressed 
    } else {
      player.SetVar("KeyPressed_WrongKey", 1);
    }
});

你的 player.SetVar("KeyPressed_WrongKey", 1) 现在每次玩家按下按钮而不是 Alt + =

时都会被调用

与其说是解决方案,不如说是建议。也就是说,删除 e.which 并改用 e.code

为什么?因为 which is deprecated and code is easy to read 无需查找数字的含义。

另外,您的问题似乎与您的代码不符。和问题相比,逻辑似乎无处不在。

如果我的理解是正确的,你可以用一行替换大部分代码。

function testKey(e) {
  var isPressedCtrl = ((e.code == "Equal") ||  (e.code == "AltLeft") || (e.code == "AltRight"));
  console.log("isPressedCtrl:["+ isPressedCtrl +"] e.code:["+ e.code +"]");
  // if (isPressedCtrl) { player.SetVar("KeyPressed_WrongKey", 1) }
  // but, you could also do:
  // player.SetVar("KeyPressed_WrongKey", isPressedCtrl);
}

  
// so the code works in the sample window
window.onload = function() {
  var d = document.getElementById("testBox");
  d.addEventListener("keyup",testKey,false);
}
<input type="text" id="testBox" placeholder="text box" />