DOM 事件监听器

addEventListener() 提供了另一种为元素绑定/添加事件的方式,并允许设置事件的传播方式。

addEventListener() 提供了另一种为元素绑定/添加事件的方式,并允许设置事件的传播方式。

addEventListener() 方法

添加一个在用户单击按钮时触发的事件侦听器:

document.getElementById("myBtn").addEventListener("click", displayDate);

addEventListener() 方法将事件处理程序附加到指定的元素,添加事件并不覆盖现有的事件处理程序。

您可以向一个元素的同一个事件添加多个事件处理程序。

您可以将事件侦听器添加到任何 DOM 对象,而不仅仅是 HTML 元素,比如可以添加到 window 对象。

addEventListener() 方法可以更轻松地控制事件的传播方式。

使用 addEventListener() 方法,可以将JavaScript 与 HTML 标记分离,以提高可读性。

可以使用 removeEventListener() 方法轻松删除事件侦听器。

语法

element.addEventListener(event, function, useCapture);

第一个参数是事件的类型(如 clickmousedown 或任何其他 HTML DOM 事件)。

第二个参数是我们要在事件发生时调用的函数。

第三个参数是一个布尔值,指定是事件的传播方式是向上冒泡还是捕获事件。该参数是可选的。

!! 请注意,您不要为事件使用 on 前缀;使用 click 而不是 onclick

向元素添加事件处理程序

当用户点击一个元素时,提示 “Hello World!":

element.addEventListener("click", function () {
  alert("Hello World!");
});

还可以使用命名函数:

element.addEventListener("click", myFunction);
function myFunction() {
  alert("Hello World!");
}

将多个事件处理程序添加到同一元素

addEventListener() 方法允许您向同一个元素添加多个事件,不会覆盖现有事件:

element.addEventListener("click", myFunction);
element.addEventListener("click", mySecondFunction);

您可以将不同类型的事件添加到同一元素:

element.addEventListener("mouseover", myFunction);
element.addEventListener("click", mySecondFunction);
element.addEventListener("mouseout", myThirdFunction);

向 window 对象添加事件处理程序

addEventListener() 方法允许您在任何 HTML DOM 对象上添加事件侦听器,例如 HTML 元素、HTML 文档、窗口对象或其他支持事件的对象,如 xmlHttpRequest 对象。

添加一个在用户调整窗口大小时触发的事件侦听器:

window.addEventListener("resize", function () {
  document.getElementById("demo").innerHTML = sometext;
});

事件冒泡还是事件捕获?

HTML DOM 中有两种事件传播方式,冒泡和捕获。

事件传播是一种定义事件发生时元素顺序的方法。如果 <div> 元素中有一个 <p> 元素,并且用户单击了 <p> 元素,那么应该首先处理哪个元素的“单击”事件?

冒泡中,最里面元素的事件首先被处理,然后是外部:首先处理 <p> 元素的点击事件,然后是 <div> 元素的点击事件。

捕获最外层元素的事件时,首先处理最外层元素的事件,然后是内部:首先处理 <div> 元素的点击事件,然后是 <p> 元素的点击事件。

使用 addEventListener() 方法,您可以使用 useCapture 参数指定事件传播类型:

addEventListener(event, function, useCapture);

默认值为 false,将使用冒泡传播,当该值设置为 true 时,事件使用捕获传播。

document.getElementById("myP").addEventListener("click", myFunction, true);
document.getElementById("myDiv").addEventListener("click", myFunction, true);

removeEventListener() 方法

removeEventListener() 方法删除通过 addEventListener() 方法附加的事件处理程序:

element.removeEventListener("mousemove", myFunction);

示例:

<!DOCTYPE html>
<html>
<head>
<style>
#myDIV {
  background-color: coral;
  border: 1px solid;
  padding: 50px;
  color: white;
  font-size: 20px;
}
</style>
</head>
<body>

<h2>JavaScript removeEventListener()</h2>

<div id="myDIV">
  <p>这个 div 元素绑定了一个 onmousemove 事件:当鼠标进入橙色区域的时候,会显示随机数。</p>
  <p>点击下面的按钮删除 div 元素绑定的 onmousemove 事件</p>
  <button onclick="removeHandler()" id="myBtn">删除事件</button>
</div>

<p id="demo"></p>

<script>
document.getElementById("myDIV").addEventListener("mousemove", myFunction);

function myFunction() {
  document.getElementById("demo").innerHTML = Math.random();
}

function removeHandler() {
  document.getElementById("myDIV").removeEventListener("mousemove", myFunction);
}
</script>

</body>
</html>