首页 > 解决方案 > $(document).keydown/up 在使用辅助键时不起作用

问题描述

我有这个代码

$(document).keydown(function(){ 
   $("#movecheck").text("true");
   isMoving = true;
}); 
$(document).keyup(function(){ 
   $("#movecheck").text("false");
   isMoving = false;
}); 

目前,一次使用 1 个键时它工作正常,但是当使用 2 个键时,一个会被按住,另一个不会,isMoving当第二个键不再被按下时返回 false,而第一个键仍然按下,我有一个防重影键盘,所以我知道这不是问题所在,所以我相信它可能与 jquery 如何检查某个键是否按下有关。

我怎样才能使它使用多个键工作?

任何帮助,将不胜感激

标签: javascriptjqueryhtml

解决方案


您需要使用整数而不是布尔值,因为目前,无论您按下多少其他键,都isMoving将始终设置为当您释放一个键时。false

这是一个使用整数变量的示例:

let pressedCount = 0;
$(document).keydown(function(event){
   if (!event.originalEvent.repeat) {
     pressedCount++;
     setMoveCheck();
   }
});
$(document).keyup(function(){
   pressedCount--;
   setMoveCheck();
}); 

function isMoving() {
  return pressedCount !== 0;
}

function setMoveCheck() {
  $("#movecheck").text(isMoving() ? "true" : "false");
}
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
<div id="movecheck">false</div>

除此之外,您还必须检查是否keydown因为按住某个键而生成了事件。


推荐阅读