在JS/jQuery中绑定方向键

如何在Javascript和/或jQuery中绑定函数到左和右方向键?我查看了jQuery的js-hotkey插件(包装了内置的bind函数以添加一个参数来识别特定的键),但它似乎不支持方向键。

364247 次浏览
$(document).keydown(function(e){
if (e.which == 37) {
alert("left pressed");
return false;
}
});

字符编码:

37 -左

38岁以上

39 -对

40 -下降

你可以使用方向键的keyCode(37,38,39和40表示左,上,右和下):

$('.selector').keydown(function (e) {
var arrow = { left: 37, up: 38, right: 39, down: 40 };


switch (e.which) {
case arrow.left:
//..
break;
case arrow.up:
//..
break;
case arrow.right:
//..
break;
case arrow.down:
//..
break;
}
});

检查上面的例子在这里

你确定jQuery。热键不支持方向键?我之前摆弄过他们的演示,当我在IE7、Firefox 3.5.2和谷歌Chrome 2.0.172中测试它时,观察到左右上下工作正常……

编辑:它显示jquery。热键已重新定位到Github: https://github.com/jeresig/jquery.hotkeys

这有点晚了,但热键有一个非常严重的错误,导致事件被执行多次,如果你附加多个热键到一个元素。只需使用纯jQuery。

$(element).keydown(function(ev) {
if(ev.which == $.ui.keyCode.DOWN) {
// your code
ev.preventDefault();
}
});

你可以使用e.preventDefault();,而不是像上面的例子中那样使用return false;,它做同样的事情,但更容易理解和阅读。

document.onkeydown = function(e) {
switch(e.which) {
case 37: // left
break;


case 38: // up
break;


case 39: // right
break;


case 40: // down
break;


default: return; // exit this handler for other keys
}
e.preventDefault(); // prevent the default action (scroll / move caret)
};

如果您需要支持IE8,请以e = e || window.event; switch(e.which || e.keyCode) {启动函数体。

< p > < br >(2020年编辑)< br > 注意,KeyboardEvent.which现在已弃用。有关检测方向键的更现代的解决方案,请参见这个例子使用KeyboardEvent.key。< / p >

我只是把其他答案中最好的部分结合起来:

$(document).keydown(function(e){
switch(e.which) {
case $.ui.keyCode.LEFT:
// your code here
break;


case $.ui.keyCode.UP:
// your code here
break;


case $.ui.keyCode.RIGHT:
// your code here
break;


case $.ui.keyCode.DOWN:
// your code here
break;


default: return; // allow other keys to be handled
}


// prevent default action (eg. page moving up/down)
// but consider accessibility (eg. user may want to use keys to choose a radio button)
e.preventDefault();
});

你可以使用KeyboardJS。我为这样的任务编写了库。

KeyboardJS.on('up', function() { console.log('up'); });
KeyboardJS.on('down', function() { console.log('down'); });
KeyboardJS.on('left', function() { console.log('right'); });
KeyboardJS.on('right', function() { console.log('left'); });

签出库=> http://robertwhurst.github.com/KeyboardJS/

使用纯Javascript的简洁解决方案(感谢Sygmoral提出的改进建议):

document.onkeydown = function(e) {
switch (e.keyCode) {
case 37:
alert('left');
break;
case 39:
alert('right');
break;
}
};

也可参见https://stackoverflow.com/a/17929007/1397061

你可以使用jQuery绑定:

$(window).bind('keydown', function(e){
if (e.keyCode == 37) {
console.log('left');
} else if (e.keyCode == 38) {
console.log('up');
} else if (e.keyCode == 39) {
console.log('right');
} else if (e.keyCode == 40) {
console.log('down');
}
});

咖啡&Jquery

  $(document).on 'keydown', (e) ->
switch e.which
when 37 then console.log('left key')
when 38 then console.log('up key')
when 39 then console.log('right key')
when 40 then console.log('down key')
e.preventDefault()

你可以通过以下方法检查arrow key是否被按下:

$(document).keydown(function(e){
if (e.keyCode > 36 && e.keyCode < 41) {
alert( "arrowkey pressed" );
return false;
}
});

阻止箭头只适用于任何其他对象选择,好吧,实际上我还没有在另一个对象上测试LOL。 但它可以停止页面上的箭头事件和输入类型

我已经尝试阻止箭头左右改变选择对象的值使用“e.c preventdefault()”或“返回false”在“kepress”“keydown”和“keyup”事件,但它仍然改变对象的值。但是事件仍然告诉你箭头被按下了。

一个健壮的Javascript库,用于捕获键盘输入和输入的组合键。它没有依赖关系。

< a href = " http://jaywcjlove.github。io /热键" rel = " http://jaywcjlove.github.io/hotkeys/ nofollow”> < / >

hotkeys('right,left,up,down', function(e, handler){
switch(handler.key){
case "right":console.log('right');break
case "left":console.log('left');break
case "up":console.log('up');break
case "down":console.log('down');break
}
});

我来这里是为了寻找一种简单的方法,让用户在关注一个输入时,使用方向键来+1或-1一个数字输入。我从来没有找到一个好的答案,但使下面的代码,似乎工作得很好-使这个网站范围现在。

$("input").bind('keydown', function (e) {
if(e.keyCode == 40 && $.isNumeric($(this).val()) ) {
$(this).val(parseFloat($(this).val())-1.0);
} else if(e.keyCode == 38  && $.isNumeric($(this).val()) ) {
$(this).val(parseFloat($(this).val())+1.0);
}
});

纯js右转或左转的例子

        window.addEventListener('keydown', function (e) {
// go to the right
if (e.keyCode == 39) {


}
// go to the left
if (e.keyCode == 37) {


}
});