我已经设置了一个keydown函数,我想做不同的事情,这取决于是否按下了向左,向右,向上或向下箭头键。这是使用switch语句,但我也想在按下任何箭头键时执行某些操作,但无法弄明白。我的代码:
$(document).keydown(function (e) {
var keyCode = e.keyCode || e.which,
arrow = {left: 37, up: 38, right: 39, down: 40 },
switch (keyCode) {
case arrow.left:
// do something left
break;
case arrow.right:
// do something right
break;
}
});
我真的只想要一行代码,我可以检查是否按下任何箭头键,但无法弄明白,例如:
case arrow:
// do something for any arrow keys
break;
只使用“案例箭头似乎不起作用。有人可以帮忙吗?
提前致谢!
编辑:感谢大家的帮助。这是我的最终代码,对任何人来说都是:$(document).keydown(function (e) {
if (e.which >= 37 && e.which <= 40) {
$('p.key-notification').fadeOut('slow');
}
var keyCode = e.keyCode || e.which,
arrow = {left: 37, up: 38, right: 39, down: 40 },
switch (keyCode) {
case arrow.left:
// do something left
break;
case arrow.right:
// do something right
break;
}
});
答案 0 :(得分:5)
为什么这也必须在您的switch
声明中?
切换后单独生成if
语句:
if (keyCode >= 37 && keyCode <= 40) {
// run your code here
}
答案 1 :(得分:2)
单个switch
语句无法在多个条件下匹配 - 您可以使用直播,但不会在后续情况下评估表达式,并且无法达到预期效果。我会这样做:
if (keyCode >= 37 && keyCode <= 40) {
// do any processing for _any_ arrow key here if it should happen
// before individual arrow key processing
switch (keyCode) {
case arrow.left:
// do something left
break;
case arrow.right:
// do something right
break;
}
// do any processing for _any_ arrow key here if it should happen
// after individual key processing
}
将switch
置于if
语句中可以在没有任何案例匹配的情况下保存评估。 (很明显,如果您以后希望switch
处理其他密钥,则需要将其移出if
。)
如果您需要对没有连续键码的键执行类似操作,那么显然您无法使用>= && <=
条件,因此您可以执行以下操作:
if (keyCode === arrow.left || keyCode === arrow.right
|| keyCode === arrow.up || keyCode === arrow.down) {
答案 2 :(得分:1)
如果我理解正确,这应该适合您的需要。
另一种增加可读性的方法
var arrow = { left: 37, up: 38, right: 39, down: 40 };
其中任何一个
switch (evt.keyCode) {
case arrow.right:
case arrow.left:
case arrow.up:
case arrow.down:
// Do something
break;
}
其中一个
switch (evt.keyCode) {
case arrow.right:
// Do right
break;
case arrow.left:
// Do left
break;
case arrow.up:
// Do up
break;
case arrow.down:
// Do down
break;
}