[英]Binding arrow keys in JS/jQuery
如何将函数绑定到 Javascript 和/或 jQuery 中的左右箭头键? 我查看了 jQuery 的 js-hotkey 插件(包装内置绑定函数以添加参数以识别特定键),但它似乎不支持箭头键。
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) {
e = e || window.event; switch(e.which || e.keyCode) {
e = e || window.event; switch(e.which || e.keyCode) {
.
(编辑 2020)
请注意, KeyboardEvent.which
现在已弃用。 请参阅此使用KeyboardEvent.key
示例,以获取更现代的检测箭头键的解决方案。
$(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;
}
});
在这里检查上面的例子。
这有点晚了,但是 HotKeys 有一个非常严重的错误,如果将多个热键附加到一个元素,它会导致事件多次执行。 只需使用普通的 jQuery。
$(element).keydown(function(ev) {
if(ev.which == $.ui.keyCode.DOWN) {
// your code
ev.preventDefault();
}
});
我只是结合了其他答案中最好的部分:
$(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'); });
使用纯 Javascript 的简洁解决方案(感谢 Sygmoral 提出的改进建议):
document.onkeydown = function(e) {
switch (e.keyCode) {
case 37:
alert('left');
break;
case 39:
alert('right');
break;
}
};
你确定 jQuery.HotKeys 不支持方向键吗? 我之前弄乱了他们的演示,并在 IE7、Firefox 3.5.2 和 Google Chrome 2.0.172 中测试时观察到左、右、上和下工作......
编辑:看来 jquery.hotkeys 已重新定位到 Github: https : //github.com/jeresig/jquery.hotkeys
而不是使用return false;
在上面的例子中,你可以使用e.preventDefault();
它的作用相同,但更易于理解和阅读。
向右或向左走的纯 js 示例
window.addEventListener('keydown', function (e) {
// go to the right
if (e.keyCode == 39) {
}
// go to the left
if (e.keyCode == 37) {
}
});
您可以使用 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');
}
});
您可以通过以下方式检查是否按下了arrow key
:
$(document).keydown(function(e){
if (e.keyCode > 36 && e.keyCode < 41) {
alert( "arrowkey pressed" );
return false;
}
});
一个强大的 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
}
});
防止箭头仅适用于其他任何对象 SELECT,实际上我还没有对另一个对象 LOL 进行测试。 但它可以停止页面和输入类型上的箭头事件。
我已经尝试在“kepress”、“keydown”和“keyup”事件上使用“e.preventDefault()”或“return false”来阻止左右箭头以更改 SELECT 对象的值,但它仍然会更改对象值。 但事件仍然告诉你箭头被按下。
我来到这里寻找一种简单的方法,让用户在专注于输入时,使用箭头键 +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);
}
});
用咖啡和 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()
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.