javascript - 如何修复查询选择器 (DOM) 和事件监听器?
问题描述
我目前正在做 Angela Yu 的网络开发课程。但是,我坚持一件事。在第 13 节,她介绍了事件监听器。但是,当我尝试单击“W”按钮时,没有弹出警告框。我知道 JavaScript 文件与 HTML 文件正确连接,因为我可以在编写 alert("Hello World"); 时弹出一个简单的警报。此外,当我运行此部分的已完成文件时,它运行良好。我只是被困在这小步上。
document.querySelector("button").addEventListsener("click", handleClick);
function handleClick() {
alert("I got clicked!");
}
<link href="https://fonts.googleapis.com/css?family=Arvo" rel="stylesheet">
<h1 id="title">Drum Kit</h1>
<div class="set">
<button class="w drum">w</button>
<button class="a drum">a</button>
<button class="s drum">s</button>
<button class="d drum">d</button>
<button class="j drum">j</button>
<button class="k drum">k</button>
<button class="l drum">l</button>
</div>
<script src="index.js" charset="utf-8"></script>
<footer>
Made with ❤️ in London.
</footer>
解决方案
正确拼写 addEventListener
请委托
在键入之前单击代码段
const set = document.querySelector(".set");
const keys = set.querySelectorAll('.drum');
const handleClick = e => {
const tgt = e.target;
if (tgt.classList.contains('drum')) {
console.log(tgt.textContent, "got clicked!");
}
};
const keyArr = [...keys].map(key => key.textContent.toUpperCase());
const handleKey = e => {
const tgt = e.target;
const key = e.code.slice(-1)
const index = keyArr.indexOf(key)
if (index != -1) keys[index].click()
};
set.addEventListener("click", handleClick);
document.addEventListener("keypress", handleKey);
<link href="https://fonts.googleapis.com/css?family=Arvo" rel="stylesheet">
<h1 id="title">Drum Kit</h1>
<div class="set">
<button class="w drum">w</button>
<button class="a drum">a</button>
<button class="s drum">s</button>
<button class="d drum">d</button>
<button class="j drum">j</button>
<button class="k drum">k</button>
<button class="l drum">l</button>
</div>
<script src="index.js" charset="utf-8"></script>
<footer>
Made with ❤️ in London.
</footer>
推荐阅读
- html - 在浏览器上显示德语字符“ß”而不是“ss”的有效方法
- matlab - 用 xyz 点计算高斯曲率
- javascript - 隐藏地址栏时,Android Chrome 会在页面底部添加额外空间
- django - django allauth:如何获取linkedin 数据 - r_basicprofile、position_fields、location_fields
- python - 在 SKLearn Logistic Regression 中,class = Balanced 有助于使用不平衡数据运行模型?此选项使用什么方法
- kubernetes - 查看 Helm 图表的模板文件
- llvm - LLVM:指令不支配所有用途 - 没有控制流
- javascript - Bootstrap Modal 关闭后不按键重新打开
- python - 使用 CountVectorizer 时如何限制令牌长度?
- php - 如何防止蛮力/字典攻击?