当我将 EventListener 从 "click" 更改为 "keydown" 时代码停止工作

Code stops working when I change the EventListener from "click" to "keydown"

当您单击(在网格上)时,下面的代码成功地改变了网格中块的位置。

但是,我打算在按下某个键时执行此操作。碰巧当我将 EventListener 从“click”更改为“keydown”时,如果我在 运行 脚本时按笔记本电脑的任何键,我都得不到任何响应。

我假设元素有问题(我需要聚焦它?如何?),或者文档不知何故无法识别键输入。我该怎么做才能解决这个问题?

let x = 5;
let y = 5;

function CreateSnake(){
  tabuleiro.appendChild(snake);
   snake.style.gridColumnStart = x;
   snake.style.gridRowStart = y;

   snake.classList.add("snake");
  };

  tabuleiro.addEventListener("click" , function(){
      moveSnakeRight();
      remove()
    });

function moveSnakeRight(){
  if ( x < 10)
  console.log(x++)
;
}

function remove(){
  snake.remove()
}

我的猜测是您在错误的元素上设置了 keydown 事件侦听器。为了处理 keydown 事件,元素必须能够接收焦点(设置 tabindex)。请参阅以下演示:https://jsfiddle.net/mqe59dL6/

const noFocus = document.getElementById('noFocus');
const focus = document.getElementById('focus');

function handler(event) {
    event.cancelBubble = true;
    console.log(event.target.id || 'document', event.keyCode);
}

noFocus.addEventListener('keydown', handler);
focus.addEventListener('keydown', handler);
document.addEventListener('keydown', handler);
#noFocus {
  height: 60px;
  background-color: #aff;
  padding: 10px;
}

#focus {
  height: 60px;
  background-color: #faf;
  padding: 10px;
}
<div id="noFocus">
  I can't receive focus. Events will go to the document.
</div>
<div id="focus" tabindex="0">
  I can receive focus, click on me first.
</div>

另一种方法是处理 document 上的事件。试试 document.addEventListener("keydown", ...).