微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

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

如何解决当我将EventListener从“ click”更改为“ 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",...)

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐


Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其他元素将获得点击?
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。)
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbcDriver发生异常。为什么?
这是用Java进行XML解析的最佳库。
Java的PriorityQueue的内置迭代器不会以任何特定顺序遍历数据结构。为什么?
如何在Java中聆听按键时移动图像。
Java“Program to an interface”。这是什么意思?