按任意键除了
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" />
我正在尝试将我的 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" />