在DIV元素上捕获按键(或keydown)事件

Lal*_*and 131 html javascript scripting jquery keypress

如何在DIV元素上捕获按键或按键事件(使用jQuery)?

让DIV元素成为焦点需要什么?

hel*_*lle 277

(1)设置tabindex属性:

<div id="mydiv" tabindex="0" />
Run Code Online (Sandbox Code Playgroud)

(2)绑定到keydown:

 $('#mydiv').on('keydown', function(event) {
    //console.log(event.keyCode);
    switch(event.keyCode){
       //....your actions for the keys .....
    }
 });
Run Code Online (Sandbox Code Playgroud)

要将重点放在开始时:

$(function() {
   $('#mydiv').focus();
});
Run Code Online (Sandbox Code Playgroud)

要删除 - 如果你不喜欢它 - div焦点边框,outline: none在CSS中设置.

请参阅密钥代码表以获取更多keyCode可能性.

假设您使用jQuery的所有代码.

#

  • +1 tabindex是使div'可选'的关键点.JQuery没有必要,同样的东西适用于Angular以及(我想)使用普通的javascript事件. (39认同)
  • tabindex是关键部分,但不要将其设置为"0"以外的任何值.使其高于0会使视障用户的屏幕阅读器陷入困境(它将跳过页面上的所有内容并直接进入0以上的任何tabindex).tabindex ="0"使其"可以点击".你可以使用tabindex ="0"拥有无限元素 (23认同)
  • 浏览器对此有何支持? (4认同)
  • 也可以与&lt;pre&gt;一起使用! (2认同)
  • 优秀!我缺少tabindex属性,可能是因为DIV除非具有tabindex,否则无法获得焦点。谢啦!救了我一命!编辑:以及与React一起工作 (2认同)

Иль*_*ько 10

这里是纯 JS 的示例:

document.querySelector('#myDiv').addEventListener('keyup', function (e) {
  console.log(e.key)
})
Run Code Online (Sandbox Code Playgroud)
#myDiv {
  outline: none;
}
Run Code Online (Sandbox Code Playgroud)
<div 
  id="myDiv"
  tabindex="0"
>
  Press me and start typing
</div>
Run Code Online (Sandbox Code Playgroud)

  • 我会使用 `tabindex="-1"` 因为“键盘事件仅由 &lt;inputs&gt;、&lt;textarea&gt; 以及具有 contentEditable 属性或 tabindex="-1" 的任何内容生成。” [MDN 元素:keydown 事件](https://developer.mozilla.org/en-US/docs/Web/API/Element/keydown_event) (2认同)

nks*_*hio 5

tabindex HTML属性指示其元素是否可以聚焦,以及是否/在何处参与顺序的键盘导航(通常使用Tab键)。阅读MDN Web文档以获取完整参考。

使用jQuery

$( "#division" ).keydown(function(evt) {
    evt = evt || window.event;
    console.log("keydown: " + evt.keyCode);
});
Run Code Online (Sandbox Code Playgroud)
#division {
  width: 90px;
  height: 30px;
  background: lightgrey;
}
Run Code Online (Sandbox Code Playgroud)
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>

<div id="division" tabindex="0"></div>
Run Code Online (Sandbox Code Playgroud)

使用JavaScript

var el = document.getElementById("division");

el.onkeydown = function(evt) {
    evt = evt || window.event;
    console.log("keydown: " + evt.keyCode);
};
Run Code Online (Sandbox Code Playgroud)
#division {
  width: 90px;
  height: 30px;
  background: lightgrey;
}
Run Code Online (Sandbox Code Playgroud)
<div id="division" tabindex="0"></div>
Run Code Online (Sandbox Code Playgroud)

  • 我实际上发现这个问题是在 div 上的控件失去焦点时触发 focusout 事件的问题,比如单击 div 滚动条,只需将制表符添加到 div 即可解决,非常感谢 (2认同)