当前位置: 首页 > news >正文

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
点击蓝色区域,输出结果如图:

http://www.jsqmd.com/news/1281728/

相关文章:

  • AI教育培训应用如何真正提分?揭秘2024年头部机构私藏的7个数据驱动教学闭环设计
  • 终极Adobe激活解决方案:GenP 3.0完整破解指南
  • Raft 实现中的死活锁场景分析:从选举风暴到日志一致性的边缘案例集合
  • 抖音下载神器:三步搞定批量下载、无水印保存与智能管理
  • SpringDataRedis
  • Axure中文语言包:3分钟让专业原型设计工具说中文的完整指南
  • 2026 新版大庆防水补漏服务商参考|阳台渗漏修缮方案指南 - 筑宅安
  • C++11右值引用与移动语义:高性能编程的核心机制
  • 长期投资与复利效应:财富积累的核心策略
  • CentOS 7 搭建 vsftpd:匿名用户、本地用户、虚拟用户与 FTPS
  • 物联网设备安全芯片SE050与PIC18F86J10集成方案
  • FlashDB嵌入式数据库深度解析:架构设计与核心实现原理
  • AI推理成本暴跌63%的秘密:Llama 3、Qwen2、Phi-3在8卡A10 vs 2×H100真实吞吐与$每千token对比(独家压测数据)
  • 终极QQ空间说说备份神器:GetQzonehistory完整使用指南
  • Java土家文化管理平台毕业设计全栈实现方案
  • Rust 迁移 Python AI 服务的失败案例集:当性能提升不足以覆盖工程成本时
  • 如何在3分钟内免费安装开源视频下载助手:轻松保存网页视频的终极指南
  • p003基于爬虫与文本挖掘的网络舆情监控系统-flask_hive21(设计源文件+万字报告+讲解)(支持资料、图片参考_相关定制)_
  • 2026实力之选:广州市南沙区宸润商行——深耕南沙三年的专业礼品回收实力公司 - 品牌发掘
  • PAT甲级 1060 Are They Equal 判断两个小数是否相等
  • 国产GPU部署大模型,现在能用了
  • 全球银烧结膏市场规模与竞争趋势预测
  • 从DeepSeek到笔灵:10款AI小说软件真实评测(内含工具优缺点对比图)
  • Dify工作流实战:从零构建AI应用,可视化编排大模型与外部服务
  • c语言面试题常见易错,易混淆,比较难区分汇总
  • 百度之星 Diversity (简单树形dp)
  • 2026南阳商丘信阳梁柱墙体加固房屋改造盘点 - LYL仔仔
  • JavaAgent技术之添加注解
  • 物联网安全:SE050与PIC18F46K22硬件加密方案
  • 2026武进二手设备回收公司推荐|化工厂拆除回收公司哪家好|君东环保一站式回收服务 - geo88