事件

一个永远不做出反应的页面只是一份文档。当你想要在用户点击按钮、在搜索框中输入内容或提交表单时发生某些事情时,你需要一种方式来说"当这种情况发生时,执行这段代码"。这就是事件。本章讲的是如何监听用户的操作并对其做出响应。
监听事件
一个**事件**是页面上发生的某件事:点击、按键、表单被提交。要对其做出响应,你需要选择一个元素、命名你关心的事件,并交给一个函数来处理它。
这个函数被称为处理器。将其连接起来的方法是 addEventListener:
const button = document.querySelector(".buy-button");
button.addEventListener("click", () => {
console.log("有人点击了购买按钮");
});从左到右读这段代码:在这个按钮上,监听 "click" 事件,当它发生时,运行这个函数。处理器每次事件发生时都会运行,不是只运行一次。点击三次,它就运行三次。
处理器是普通的函数,你附加它们的元素来自DOM。如果你能选择一个元素并写一个函数,你就可以对用户对它所做的事情做出响应。
"click",并给 addEventListener 一个函数来运行。那个函数就是处理器,它每次事件发生时都会运行,不是一次。这一个方法是页面响应你的几乎所有事情的幕后推手。 事件对象
当浏览器运行你的处理器时,它给它传递一条信息:一个描述发生了什么的**事件对象**。通过给你的处理器一个参数来捕获它,通常命名为 event:
const button = document.querySelector(".buy-button");
button.addEventListener("click", (event) => {
console.log(event.target); // 被点击的元素
});最有用的部分是 event.target:事件发生的元素。如果点击是在按钮上,event.target 就是那个按钮。你不必重新选择它,事件已经告诉你它来自哪里。
event 的参数来捕获它。你将最常用的部分是 event.target,即事件发生的元素。无需重新选择它,事件已经知道它来自哪里。 常见事件
少数几个事件覆盖了你将构建的大部分内容:
click:用户点击或轻触某个东西。input:文本字段的值在他们输入时改变。submit:表单被提交。keydown:一个键被按下。
棘手的是 submit。默认情况下,提交表单会重新加载页面,这会清除你的 JavaScript 正在做的任何事情。要停止这种情况,在处理器内调用 event.preventDefault():
const form = document.querySelector("form");
form.addEventListener("submit", (event) => {
event.preventDefault(); // 停止页面重新加载
console.log("表单已提交,页面保持不动");
});click、input、submit 和 keydown。要记住的是 submit:表单默认重新加载页面,所以在处理器中调用 event.preventDefault() 来停止那种行为并保持控制。如果你错过了,你的页面会在你下面刷新,第一次这会让人困惑。 从这里事件走向何处
事件是页面如何监听的方式。你选择一个元素,命名你关心的东西,并在它发生时运行一个函数,从事件对象中读取详细信息。几乎每个交互特性都是从那个循环构建的。
自然的下一步是在处理器中做一些缓慢的事情,比如将表单发送到服务器或加载新数据,而不冻结页面。这就是异步代码的用途,它是下一章。处理器进入结构化数据,比如你在对象中保持的项目列表,也依赖于你已经知道的东西。

