在JS / jQuery中绑定箭头键

2020/09/28 02:21 · javascript ·  · 0评论

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

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) {

(编辑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'); });

在此处签出库=> 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.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;
    }
});

防止箭头仅适用于其他任何对象SELECT,那么实际上我还没有对另一个对象大声笑。但是它可以停止页面和输入类型上的箭头事件。

我已经尝试在“ kepress”,“ keydown”和“ keyup”事件上使用“ e.preventDefault()”或“ return false”更改向左和向右更改SELECT对象的值,但它仍会更改对象值。但是事件仍然告诉您按下了箭头。

强大的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
    }
});

我来到这里是在寻找一种简单的方法,让用户在专注于输入时,可以使用箭头键+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()
本文地址:http://javascript.askforanswer.com/zaijs-jqueryzhongbangdingjiantoujian.html
文章标签: ,   ,   ,  
版权声明:本文为原创文章,版权归 javascript 所有,欢迎分享本文,转载请保留出处!

文件下载

老薛主机终身7折优惠码boke112

上一篇:
下一篇:

评论已关闭!