【问题标题】:using .keypress and .keydown side by side并排使用 .keypress 和 .keydown
【发布时间】:2026-01-22 14:35:01
【问题描述】:

我需要捕获带有大小写字母的普通文本,但我也想获取 alt、ctrl、esc 等的键码。我尝试运行两个 jquery 函数 .keypress 和 .keydown,并且只接受来自 .keydown 的特殊键,但是当它们在一起时,它们只给出一个结果。我正在使用 Chrome,但我还需要支持尽可能多的其他浏览器。

【问题讨论】:

  • if(event.altKey && event.ctrlKey) { ... }

标签: javascript jquery


【解决方案1】:

您可以使用jQuery.Event 获取特殊键的状态,这是来自侦听器的回调的第一个参数:

http://jsbin.com/epuqig/2/embed?live

jQuery(function($) {
    $('input').on('keydown', function(event) {
        // event.shiftKey
        // event.ctrlKey
        // Also to fetch the keyCode use:
        // event.which
        if ( event.which == 8 && event.shiftKey ) {
            // Backspace and shift key is pressed
        }
    }); 
});

如果您不关心旧浏览器,您可以使用原版:

window.addEventListener('load', function() {
    var inputs = document.querySelectorAll('input');
    [].forEach.call(inputs, function(input) {
        input.addEventListener('keydown', keydownHandler, false);
    });
}, false);

function keydownHandler(event) {
    if ( event.keyCode == 8 && event.shiftKey ) {
        // Backspace and shift key is pressed!
    }
}

正如你所看到的,这几乎是相同的代码 sn-ps 但第二个要在 中工作

【讨论】:

  • @Christoph OP 已将 jQuery 指定为一个选项。
  • 无意冒犯,我只是想说这是原生的。可悲的是,现在很多人已经分不清了。
  • @Christoph vanilla 的问题是如果你的目标是
  • 我承认,你是对的。并感谢您添加香草代码... +1 ;)
  • 如果有人想了解更多关于奇妙的轻量级香草框架的信息,您应该访问这个网站:vanilla-js.com
【解决方案2】:
$(document).ready(function () {
    $(document).keydown(function (e) {
        var code = e.keyCode;
        if(e.altKey) // you can also use - e.ctrlKey , e.shiftKey
          // alt key
    }).keyup(function (e) {
        var code = e.keyCode;
    });
});

【讨论】: