有没有办法可以检测 Alt 键被按下哪一侧,即区分左或右 Alt ?我在某个地方看到IE可能具有altLeft
对象的altRight
和Event
属性。如果这是正确的,我们如何在Firefox中使用JavaScript检测它?
这就是它在altLeft
的IE中的工作原理:
window.onload = function(){
document.getElementById('id').onkeydown = function(){
alert(window.event.altLeft);
}
}
答案 0 :(得分:11)
DOM3添加了location
property of keyboard events(另请参阅MDN)(早期版本有keyLocation
属性),它可以满足您的需求,并在所有主流浏览器的最新版本中实现。< / p>
演示:
document.getElementById("ta").addEventListener("keydown", function(e) {
var keyLocation = ["Standard", "Left", "Right", "Numpad", "Mobile", "Joystick"][e.location];
var message = "Key '" + (e.key || e.keyIdentifier || e.keyCode) + "' is down. Location: " + keyLocation;
this.value += "\n" + message;
e.preventDefault();
}, false);
<textarea id="ta" rows="10" cols="50">Click on here and press some modifier keys such as Shift</textarea>
没有。通常,不可能以跨浏览器的方式区分左和右修改键。 shiftLeft
的{{1}},shiftRight
,ctrlLeft
,ctrlRight
,altLeft
,altRight
属性都只是IE,没有相应的存在于其他浏览器中。
DOM3添加了location
property of keyboard events(早期版本有window.event
属性)但Firefox没有实现此功能。
答案 1 :(得分:3)
好问题。事件对象不包含关于按下哪个alt的任何内容,但您可以尝试这样的事情:
var altLeft = false,
altRight = false,
time = null;
document.onkeydown = function (e) {
e = e || window.event;
//The time check is because firefox triggers alt Right + alt Left when you press alt Right so you must skip alt Left if it comes immediatelly after alt Right
if (e.keyCode === 18 && (time === null || ((+new Date) - time) > 50)) {
altLeft = true;
time = null;
} else if (e.keyCode === 17) {
altRight = true;
time = + new Date;
}
}
document.onkeyup = function (e) {
e = e || window.event;
if (e.keyCode === 18) altLeft = false;
else if (e.keyCode === 17) altRight = false;
}
document.onclick = function () {
console.log("left", altLeft, "right", altRight);
}
在Firefox中它适用于我,无论如何17和18(这是alt Right和Left的关键代码)可以在不同的浏览器或操作系统上进行更改,因此您必须检查它们。
答案 2 :(得分:0)
<html>
<head>
<title></title>
<script type="text/javascript">
flag = 0;
text = ['else', 'Ctrl', 'AltGr', 'Alt'];
function key_down(e) {
var aa = e.keyCode;
if (aa == 18) {
event.keyCode = 0;
event.returnValue = false;
}
this_key(aa);
}
function this_key(fn1) {
if (fn1 == 17) {
flag = 1;
timer = setTimeout('this_key(1)', 10);
return;
}
if (fn1 == 18 && flag == 1) {
clearTimeout(timer);
}
var aa = 0;
if (fn1 == 1) {
aa = 1;
}
if (fn1 == 18) {
if (flag == 1) {
aa = 2;
} else {
aa = 3;
}
}
document.getElementById('result').innerHTML = text[aa];
flag = 0;
}
</script>
</head>
<body onkeydown="key_down(event);">
<div id="result" style="font-size: 5em;"></div>
</body>
</html>
这是我的解决方案