一、简单认识e
事件对象e,是event的简称。当一个事件被触发时候,这个事件的有关数据都会被存储在一个事件对象e里面,这个对象e有许多固定方法提供给我们查看里面各种数据。
二、关于e对象的常用属性介绍
1. e.eventPhase查看事件触发所处的阶段
值为1表示捕获阶段 ;值为2表示目标阶段;值为3表示冒泡阶段
2.e.target 用来获取触发的事件的元素
- <!DOCTYPE html>
- <html lang="en">
-
- <head>
- <title>Document</title>
- <style>
- #box1 {
- width: 300px;
- height: 300px;
- background-color: yellowgreen;
- }
-
- #box2 {
- width: 200px;
- height: 200px;
- background-color: pink;
- }
-
- #box3 {
- width: 100px;
- height: 100px;
- background-color: skyblue;
- }
- </style>
- </head>
-
- <body>
- <div id="box1">box1
- <div id="box2">box2
- <div id="box3">box3</div>
- </div>
- </div>
- <script>
- // 获取元素
- var box1 = document.getElementById("box1");
- var box2 = document.getElementById("box2");
- var box3 = document.getElementById("box3");
-
- // 添加事件
- box1.onclick = function (e) {
- // e指的就是存储事件对象的参数,只要事件被触发(即box1被点击),e就会自动接收数据
- e = e || window.event; // 解决兼容问题
- console.log(e.target);
- };
- </script>
- </body>
-
- </html>
页面展示效果

当点击最外层的盒子时,控制台输出(最外层盒子)

当点击最里面的box3时,控制台输出:

3.当所有嵌套元素都绑定事件后,执行顺序:
- <!DOCTYPE html>
- <html lang="en">
-
- <head>
- <title>Document</title>
- <style>
- #box1 {
- width: 300px;
- height: 300px;
- background-color: yellowgreen;
- }
-
- #box2 {
- width: 200px;
- height: 200px;
- background-color: pink;
- }
-
- #box3 {
- width: 100px;
- height: 100px;
- background-color: skyblue;
- }
- </style>
- </head>
-
- <body>
- <div id="box1">box1
- <div id="box2">box2
- <div id="box3">box3</div>
- </div>
- </div>
- <script>
- // 获取元素
- var box1 = document.getElementById("box1");
- var box2 = document.getElementById("box2");
- var box3 = document.getElementById("box3");
-
-
- // /当给所有嵌套元素绑定点击事件时,事件处理函数默认在冒泡阶段执行(即当点击最内层元素时,会从内到外依次触发)
- // 添加事件
- box1.onclick = function (e) {
- // e指的就是存储事件对象的参数,只要事件被触发(即box1被点击),e就会自动接收数据
- e = e || window.event; // 解决兼容问题
- console.log('box1');
- };
- box2.onclick = function (e) {
- // e指的就是存储事件对象的参数,只要事件被触发(即box1被点击),e就会自动接收数据
- e = e || window.event; // 解决兼容问题
- console.log('box2');
- };
- box3.onclick = function (e) {
- // e指的就是存储事件对象的参数,只要事件被触发(即box1被点击),e就会自动接收数据
- e = e || window.event; // 解决兼容问题
- console.log('box3');
- };
- </script>
- </body>
-
- </html>
页面展示:

当点击最内层box3时,控制台会依次输出 box3 box2 box1
当点击中间的box2时,控制台会依次输出 box2 box1
4.e.currentTarget用于获取触发事件的源元素
- <!DOCTYPE html>
- <html lang="en">
-
- <head>
- <title>Document</title>
- <style>
- #box1 {
- width: 300px;
- height: 300px;
- background-color: yellowgreen;
- }
-
- #box2 {
- width: 200px;
- height: 200px;
- background-color: pink;
- }
-
- #box3 {
- width: 100px;
- height: 100px;
- background-color: skyblue;
- }
- </style>
- </head>
-
- <body>
- <div id="box1">box1
- <div id="box2">box2
- <div id="box3">box3</div>
- </div>
- </div>
- <script>
- // 获取元素
- var box1 = document.getElementById("box1");
- var box2 = document.getElementById("box2");
- var box3 = document.getElementById("box3");
-
- box1.onclick = function (e) {
- // e指的就是存储事件对象的参数,只要事件被触发(即box1被点击),e就会自动接收数据
- e = e || window.event; // 解决兼容问题
- console.log(e.currentTarget); ///获取触发事件的源元素
-
- // 也就是说,当点击box1,box2,时,也会出书box1元素
-
- };
- </script>
- </body>
-
- </html>
上面的代码是只给最外层盒子box1绑定点击事件;
当我们点击最内层盒子box3,或者中间的盒子box2,e.currentTarget都会输出box1(即最外层盒子)
5.e.type获取事件类型,取值有click、blur、focus、mousedown、mouseup等等
6.e.preventDefault( )阻止默认行为
7.e.stopPropagation()阻止冒泡行为 (注:只有当bubbles为true时可以使用)
注意:使用addEventListener添加的事件处理程序,只能使用removeEventListener来移除
格式:
- var btn=document.getElementById('myBtn')
-
- 添加点击事件
- btn.addEventListener("click",handleClick,false)
-
- 移除点击事件
- btn.removeEventListener("click",handleClick,false)
-
特别注意的是:绑定事件处理函数和移除事件处理函数必须是同一个,否则无效
- ///绑定点击事件和移除点击事件的函数必须是同一个,否则无效
-
-
- ///!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
- /// 下面的移除点击事件无效
- var btn=document.getElementById('myBtn')
- btn.addEventListener("click",()=>{
- console.log(this.id)
- }
- fasle)
-
- btn.removeEventListener("click",()=>{
- console.log(this.id)
- },false) 无效