JavaScript笔记:BOM--event

📅 2026/7/28 16:46:48 👁️ 阅读次数 📝 编程学习
JavaScript笔记:BOM--event

event 事件

浏览器自动触发或者用户手动触发的页面状态的改变
事件处理函数:当事件发生时自动调用的函数
事件发生之前就需要绑定到事件属性上

绑定事件的三种方式:

1、在html中绑定

<a onclick = "alert('hello world')"></a>

2、在js中动态绑定,为事件属性赋值一个函数

document.getElementById("xxx").onclick = fun; function fun(){ alert("hello world"); }

3、使用addEventListener添加

function fun1() { console.log("abc1"); } function fun2() { console.log("abc2"); } Element.addEventListener("click", fun1); Element.addEventListener("click", fun2);

删除事件

Element.removeEventListener("click", fun2);

注意:添加时,第二个参数可以写匿名函数,若该事件明确未来可能删除,则不可以写匿名函数,否则无函数名无法删除。

事件模型

一个事件发生,有三个阶段
1、捕获
由外到内,记录各级父元素上绑定的相同的事件
2、目标出发
首先触发目标元素上的事件处理函数
3、冒泡
按照捕获的顺序,反向执行,由内到外,依次触发各级父元素绑定的事件的处理函数

html部分: <body> <div class="div1"> <div class="div2"> <div class="div3"></div> </div> </div> </body> css部分: <style> .div1 { width: 500px; height: 500px; background-color: #f00; } .div2 { width: 400px; height: 400px; background-color: #0f0; position: absolute; top: 50px; left: 50px; } .div3 { width: 300px; height: 300px; background-color: #00f; position: absolute; top: 50px; left: 50px; } </style> js部分: var div1 = document.getElementsByClassName("div1")[0]; var div2 = document.getElementsByClassName("div2")[0]; var div3 = document.getElementsByClassName("div3")[0]; div1.addEventListener("click", fun); div2.addEventListener("click", fun); div3.addEventListener("click", fun); function fun(e) { console.log(this.className); }

点击蓝色区域,输出结果如图:

addEventListener的第三个参数:capture

是否在捕获阶段,提前出发
true或者false,默认为false
将上面的代码中的js部分中修改一行

div2.addEventListener("click", fun, true);

点击蓝色区域,输出结果如图:

不难发现,给div2绑定事件时,加入了第三个参数,true,div2的事件可以提前触发。

事件对象

当事件发生时,自动创建的封装所有事件信息的一个对象

获取:

DOM标准: 事件对象默认作为事件处理函数的第一个参数传入

function fun(e){ e;//事件发生时,自动获得事件对象 }

IE8:在全局window,定义了一个event

function fun(e){ window.e;//事件发生时,自动获得事件对象 }

兼容写法:

function fun(e){ e = e | window.e; }
取消冒泡

DOM标准:e.Propagation();
IE8:e.cancelBubble = true;
兼容写法:

if (e.stopPropagation()) { e.stopPropagation(); } else { e.cancelBubble = true; }

本人使用的Chrome浏览器,故将上面代码中js部分中的fun函数做如下改动

function fun(e) { console.log(this.className); e.stopPropagation(); }

并删掉之前加入的true
点击蓝色区域,输出结果如图: