使用jQuery捕获“删除”按键事件

131
使用jQuery文档中关于keypress事件处理程序的示例代码时,无法捕获Delete键。在Firefox中按下Delete键时,下面的片段将记录 0:
$(document).keypress(function(e) {
    console.log(e.which);       
});

看起来应该有一种方法可以捕获Delete键,但它是一个模糊的术语,因此谷歌并没有提供太多帮助。


使用Jquery:$(document).keyup(function(e){if(e.key =='Backspace'|| e.key =='Delete'){...}}); - Avatar
5个回答

216

在IT技术中,你不应该使用keypress事件,而是使用keyupkeydown事件,因为keypress事件专门用于处理真实(可打印的)字符。keydown事件被处理在更低级别上,所以它可以捕获所有非打印键,如deleteenter


keyup会更好地完成这项工作。 - atilkan
2
@atilkan 不是的,用户期望在“keydown”时得到反馈,而不是在“keyup”时。所有文本编辑器都会在按下键时执行操作,而不是在释放键时。 - Philippe Leybaert
2
在我的情况下,程序无法捕获最后按下的字符。 - atilkan
和atilkan一样,所以我使用keyup - Barbz_YHOOL

87
$('html').keyup(function(e){
    if(e.keyCode == 46) {
        alert('Delete key released');
    }
});

来源:JavaScript 字符码和按键码,来自 www.cambiaresearch.com


18
应该是alert('删除键已释放') - Waldheinz
如果有人使用了Tod建议的keypress而不是keyup,那么你会得到针对“.”键的keycode == 46事件。但是使用keyup效果很好。谢谢。 - Mubashar
2
正如另一个答案所指出的,.keyCode 已经被弃用。 - xiGUAwanOU

39

Javascript键码

  • e.keyCode == 8代表退格
  • e.keyCode == 46代表向前删除或在PC上按下删除按钮

除了这个细节以外,Colin和Tod的答案是可行的。


4
应该使用 e.keyCode 而不是 e.KeyCode。 - Jerome

27

event.key === "Delete"

更加新近和更为简洁的方法:使用event.key。不再使用任意数字代码!

注意:旧属性(.keyCode.which)已被弃用。

document.addEventListener('keydown', function(event) {
    const key = event.key; // const {key} = event; ES6+
    if (key === "Delete") {
        // Do things
    }
});

Mozilla 文档

支持的浏览器


2
您可以使用jQuery跟踪删除/退格键,如下所示:
 $(document).keyup(function(e){
   if(e.key === "Backspace") {
    alert('Delete key/ backspace');
   }
 });

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接