【问题标题】:Bind Multiple Keys to Keypress Event将多个键绑定到 Keypress 事件
【发布时间】:2021-11-24 15:40:10
【问题描述】:

我目前正在使用这个 Javascript 按键代码在按键时触发事件:

$(document).keydown(function(e) {
    switch(e.keyCode) {

    case 39:
        e.preventDefault();
        alert("Arrow Key");
        break;

    case 37:
        e.preventDefault();
        alert("Arrow Key");
    }
});

但我想知道的是,我是否可以绑定两个键的组合而不是绑定一个键。我可以做类似的事情吗:

$(document).keydown(function(e) {
    switch(e.keyCode) { 
        case 39 && 37:
            e.preventDefault();
            alert("Arrow Key");
        break;
    }
});

【问题讨论】:

标签: javascript jquery event-handling jquery-events


【解决方案1】:

如果您想一次检查多个键,您应该只使用一个常规键和一个或多个修改键 (alt/shift/ctrl),因为您无法确定是否可以同时按下用户的两个常规键键盘(实际上,它们总是可以按下,但由于键盘的接线方式,PC 可能无法理解)。

您可以使用 e.altKey、e.ctrlKey、e.shiftKey 字段来检查是否按下了匹配的修饰键。

例子:

$(document).keydown(function(e) {
    if(e.which == 98 && e.ctrlKey) {
        // ctrl+b pressed
    }
});

【讨论】:

  • 谢谢您,非常感谢您的帮助。是的,这实际上更符合我的要求。再次感谢。
  • 完美,完美,完美——正是我今天早上想要的!
【解决方案2】:

为什么不使用if 而不是switch

$(document).keydown(function(e) {
    if ((e.keyCode === 37) || (e.keyCode === 39)) {
        e.preventDefault();
        alert("Arrow Key");
    }
});

【讨论】:

  • 是的,这样就可以了,我不知道为什么我更喜欢使用开关,但我想这真的没关系。再次感谢您的帮助。非常感谢。
  • 我知道这与这篇文章没有任何关系,但如果你看到这个,如果你有时间,也许你可以帮助我使用 jQuery LazyLoad 插件?
  • 只是好奇,但是当您说“我正在寻找适用于按下组合键的东西时,这怎么可能是您接受的答案。有什么想法吗?”在另一条评论中?
【解决方案3】:

您可以使用 case fallthrough:

$(document).keydown(function(e) {
    switch(e.which) { 
        case 39:
        case 37:
            e.preventDefault();
            alert("Arrow Key");
            break;
    }
});

请注意,我使用e.which 而不是e.keyCode 以使其在所有浏览器中都能正常工作(jQuery 自动将实际包含关键代码的属性分配给 e.which)。

【讨论】:

  • 没有。对于keydown 事件,keyCode 是所有浏览器中的正确属性。也许您正在考虑keypress 事件?
  • 我将对此进行测试,但可以肯定的是,这将在按下两个键时触发,对吧?
  • 不,此代码不适用于combination,这是用于either one of them is pressed
  • 我正在寻找适用于按键组合的东西。有什么想法吗?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2010-10-16
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多