0

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

我的 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 也为真......

有人可以帮忙吗?

如何更正脚本以按下除需要之外的任何键?

4

2 回答 2

2

最后,如果没有按下其中一个,则由于 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 + = 时都会调用你的now

于 2020-06-17T11:33:40.527 回答
0

更多的是建议而不是解决方案。也就是说,改为丢弃e.which和使用e.code

为什么?因为which已弃用code易于阅读,无需查找数字的含义。

此外,您的问题似乎与您的代码不匹配。与问题相比,逻辑似乎无处不在。

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

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" />

于 2020-06-17T11:56:04.333 回答