使用jQuery监听键盘按下事件

42

我希望检测当在动态注入的HTML中按下回车键时。

要简单地检测按下回车键,我可以这样做:

$('#textfield').keydown(function (e){
    if(e.keyCode == 13){
        console.log('Enter was pressed');
    }
})

这段代码对于on()有效,但我担心它效率低下,因为jQuery会在每次按键时都进行检查。这个有什么低效的地方吗?

这个代码适用于on(),但我担心它效率低下,因为jQuery会在每次按键时都进行检查。这个做法存在低效的可能吗?

$('body').on('keydown','#textfield', function(event) {
  if (event.keyCode == 13) {
    console.log('Enter was pressed');
  }
}

4
不。当按下一个键时,会发生成千上万的事情,它只是其中微不足道的一件事。 - JJJ
3个回答

63

如果您希望在页面任何位置捕获按键 -

$(document).keypress(function(e) {
  if(e.which == 13) {
    // enter pressed
  }
});

不用担心它检查每个按键,它并不会对浏览器产生重大负载。


但是为什么有人要在隐藏字段中输入内容呢?@DCdaz - M H
在 DOM 操作后,一个被隐藏或注入并重新显示的字段。 - user4563161

10
你仍然可以使用 .on()。
$(document).off('keyup#textfield');

$(document).on('keyup#textfield', function(event) {
    if (event.keyCode == 13) {
         console.log('Enter was pressed');
    }
});

1
在实际操作中,你不需要担心任何问题。浏览器已经会处理该事件,即使它被 body 捕获并从委托事件运行选择器,这对于 JQuery 来说也不是一个深度或困难的实际检查,特别是使用仅限于 ID 的选择器。

同意。顺便说一句:你其实没有选择 - 没有办法添加键监听器(虽然这会很好)。 - Fabian Lauer
即使有一种方法可以向单个键添加监听器,但在内部,浏览器仍然必须对每个按键做出反应以确定按下了哪个键。 - JJJ

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