如何在Javascript和/或jQuery中将函数绑定到左右箭头键?我查看了jQuery的js-hotkey插件(包含内置的bind函数以添加一个参数来识别特定的键),但它似乎不支持箭头键。
答案 0 :(得分:509)
$(document).keydown(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)
});
将箭头键的自定义代码放在相应的case
和break
行之间。
e.which
由jQuery规范化,因此适用于所有浏览器。对于纯JavaScript方法,请将前两行替换为:
document.onkeydown = function(e) {
e = e || window.event;
switch(e.which || e.keyCode) {
(编辑2017)
如果您觉得有意思,可以立即使用e.key
代替e.which
或e.keyCode
。 e.key
正在成为推荐标准,允许您检查字符串:'ArrowLeft'
,'ArrowUp'
,'ArrowRight'
,'ArrowDown'
。新浏览器原生支持它,check here。
答案 1 :(得分:446)
$(document).keydown(function(e){
if (e.which == 37) {
alert("left pressed");
return false;
}
});
字符代码:
37 - 离开
38 - up
39 - 对
40 - down
答案 2 :(得分:103)
您可以使用箭头键的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;
}
});
检查上面的示例here。
答案 3 :(得分:23)
答案 4 :(得分:16)
我只是将其他答案的最佳位组合在一起:
$(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();
});
答案 5 :(得分:14)
您可以使用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/
答案 6 :(得分:12)
使用普通Javascript的简洁解决方案(感谢Sygmoral的建议改进):
document.onkeydown = function(e) {
switch (e.keyCode) {
case 37:
alert('left');
break;
case 39:
alert('right');
break;
}
};
答案 7 :(得分:9)
你确定jQuery.HotKeys不支持箭头键吗?我之前用他们的演示搞砸了,当我在IE7,Firefox 3.5.2和谷歌Chrome 2.0.172中进行测试时,观察了左,右,上,下工作......
编辑:看来jquery.hotkeys已重新定位到Github:https://github.com/jeresig/jquery.hotkeys
答案 8 :(得分:5)
您可以使用return false;
来执行相同操作,但更容易理解和阅读,而不是像上面示例中那样使用e.preventDefault();
。
答案 9 :(得分:4)
右边或左边的纯js示例
window.addEventListener('keydown', function (e) {
// go to the right
if (e.keyCode == 39) {
}
// go to the left
if (e.keyCode == 37) {
}
});
答案 10 :(得分:3)
您可以使用jQuery bind:
$(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');
}
});
答案 11 :(得分:2)
您可以通过以下方式检查arrow key
是否被按下:
$(document).keydown(function(e){
if (e.keyCode > 36 && e.keyCode < 41) {
alert( "arrowkey pressed" );
return false;
}
});
答案 12 :(得分:0)
防止箭头仅适用于任何其他对象SELECT,实际上我还没有测试另一个对象LOL。 但它可以阻止页面上的箭头事件和输入类型。
我已经尝试使用&#34; e.preventDefault()&#34;左右阻止箭头来改变SELECT对象的值。或&#34;返回false&#34; on&#34; kepress&#34; &#34; KEYDOWN&#34;和#34; keyup&#34;事件,但它仍然会更改对象值。但事件仍然告诉你箭头被按下了。
答案 13 :(得分:0)
一个强大的Javascript库,用于捕获输入的键盘输入和键组合。它没有依赖关系。
http://jaywcjlove.github.io/hotkeys/
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
}
});
答案 14 :(得分:0)
我来到这里寻找一种简单的方法让用户在专注于输入时,使用箭头键来+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);
}
});
答案 15 :(得分:-1)
咖啡&amp; 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()