全网整合营销服务商

电脑端+手机端+微信端=数据同步管理

免费咨询热线:400-708-3566

js事件冒泡与事件捕获详解

(一)事件绑定

1.普通事件绑定

给html添加一个以on开头的特定的属性(如onclick,onfocus);

<button id="A" onclick="alert(this.id)">方式一</button>

<button id="A" onclick="handler(this)">方式二</button>
<script>
 function handler(btn){
 alert(this.id); //undefined this指向window对象
 alert(btn.id); //A 
 }
</script>
<button id="A">方式三</button>
<script>
 var btn = document.getElementById("A");
 btn.onclick = function(){
 alert("1:"+this.id);
 }
 btn.onclick = function(){
 alert("2:"+this.id);
 }
 //只能绑定一个事件处理函数,后面的会覆盖前面的;
</script>

2.符合W3C标准的事件绑定(addEventListener和removeEventListener)

target.addEventListener(type, listener[, useCapture]);

type:必须,表示监听事件类型的字符串;

listener:必须,当所监听的事件类型触发时,会接收到一个事件通知对象;listener 必须是一个实现了 EventListener 接口的对象,或者是一个函数;

useCapture:可选,Boolean,默认为false,表示事件传播方式为事件冒泡;true,表示事件传播方式为事件捕获;

(事件捕获与事件冒泡下面有讲到)

这两个函数Firefox和Chrome都支持,IE9及以后也支持这两个函数;IE使用attachEvent/detachEvent来进行事件绑定和取消;

<button id="B">W3C标准一</button>
<script>
 var btn = document.getElementById("B");
 btn.addEventListener("click",handler,false);
 function handler(){
 alert(this.id); //B this指向的是dom对象; attachEvent指向的是window对象
 }
</script>
<button id="B">W3C标准二</button>
<script>
 var btn = document.getElementById("B");
 btn.addEventListener("click",handler,true);
 btn.addEventListener("click",handler,false);
 function handler(){
 alert(this.id); //B
 }
 //当点击按钮时,函数handler会执行2次,一次为事件捕获,一次为事件冒泡;
 //如果绑定的是同一个事件处理函数,且都是事件捕获或都是事件冒泡,那么只能绑定一次;
</script>

3.IE浏览器使用attachEvent/detachEvent进行事件绑定与取消

<button id="C">IE</button>
<script>
 var btn = document.getElementById("C");
 btn.attachEvent("click",handler);
 function handler(){
 alert(this.id); //undifined this指向的是window对象; addEventListener指向的是dom对象
 }
</script>

注:同一个事件处理函数只能绑定一次;不同的函数对象可以重复绑定不会覆盖;匿名函数和匿名函数即使代码完全一样,也是互相不相同的;

(二)事件捕获与事件冒泡

<div id="A">
 <div id="B">
 <div id="C"></div>
 </div>
</div>

事件捕获:就是从最外层到目标对象的顺序触发(如上面的代码,如果点击C,它的触发顺序为A→B→C)

事件冒泡:就是从目标对象到外层的顺序触发(如果点击C,它的触发顺序为C→B→A)

DOM事件流:就是支持两种事件模型,捕获型事件和冒泡型事件,捕获型事件先发生;两种事件流会触及DOM中的所有对象,从document对象开始,也在document对象结束。

图片来自网络:

<div id="A" style="width:300px; height:300px; background:red;position:relative;">
 <div id="B" style="width:200px;height:200px; background:green;position:relative;top:50px;margin:auto;">
 <div id="C" style="width:100px;height:100px; background:blue;position:relative;top:50px;margin:auto;"></div> 
 </div>
</div>
<script>
 var A = document.getElementById("A"); 
 var B = document.getElementById("B"); 
 var C = document.getElementById("C"); 
 // 目标(目标阶段的处理函数,先注册先执行)
 C.addEventListener('click',function(){alert("Ct");},true);
 C.addEventListener('click',function(){alert("Cf");},false);
 // 事件冒泡
 A.addEventListener('click',function(){alert("Af");},false);
 B.addEventListener('click',function(){alert("Bf");},false);
 // 事件捕获
 A.addEventListener('click',function(){alert("At");},true);
 B.addEventListener('click',function(){alert("Bt");},true); 
</script>
//当点击C时(蓝色),输出At Bt Ct Cf Bf Af

阻止事件的传播:

• 在W3c中,使用stopPropagation()方法

• 在IE下设置cancelBubble = true;

阻止事件的默认行为:

• 在W3c中,使用preventDefault()方法;

• 在IE下设置window.event.returnValue = false;

以上就是本文的全部内容,希望本文的内容对大家的学习或者工作能带来一定的帮助,同时也希望多多支持!


# js  # 冒泡  # 捕获  # 事件冒泡  # 事件捕获  # JavaScript事件冒泡与事件捕获实例分析  # javascript 中事件冒泡和事件捕获机制的详解  # 一篇文章让你彻底弄懂JS的事件冒泡和事件捕获  # JS中绑定事件顺序(事件冒泡与事件捕获区别)  # 浅谈javascript中的事件冒泡和事件捕获  # JS中事件冒泡和事件捕获介绍  # javascript事件冒泡和事件捕获详解  # js之事件冒泡和事件捕获详细介绍  # 浅析js中事件冒泡与事件捕获  # 绑定  # 的是  # 都是  # 两种  # 是从  # 这两个  # 是一个  # 也在  # 或者是  # 可选  # 讲到  # 默认为  # 实现了  # 一个函数  # 最外层  # removeEventListener  # addEventListener  # target  # ff  # W3C 


相关文章: 长沙做网站要多少钱,长沙国安网络怎么样?  建站之星后台管理系统如何操作?  广州网站建站公司选择指南:建站流程与SEO优化关键词解析  常州自助建站费用包含哪些项目?  电商网站制作价格怎么算,网上拍卖流程以及规则?  建站之星免费模板:自助建站系统与智能响应式一键生成  深圳网站制作案例,网页的相关名词有哪些?  建站之星如何开启自定义404页面避免用户流失?  如何正确下载安装西数主机建站助手?  上海网站制作网页,上海本地的生活网站有哪些?最好包括生活的各个方面的?  西安专业网站制作公司有哪些,陕西省建行官方网站?  相册网站制作软件,图片上的网址怎么复制?  高端企业智能建站程序:SEO优化与响应式模板定制开发  如何打造高效商业网站?建站目的决定转化率  建站之星2.7模板:企业网站建设与h5定制设计专题  黑客如何利用漏洞与弱口令入侵网站服务器?  建站之星导航菜单设置与功能模块配置全攻略  网站设计制作企业有哪些,抖音官网主页怎么设置?  建站主机服务器选型指南与性能优化方案解析  建站之星安装需要哪些步骤及注意事项?  如何快速启动建站代理加盟业务?  网站制作中优化长尾关键字挖掘的技巧,建一个视频网站需要多少钱?  标准网站视频模板制作软件,现在有哪个网站的视频编辑素材最齐全的,背景音乐、音效等?  云南网站制作公司有哪些,云南最好的招聘网站是哪个?  建站之星备案流程有哪些注意事项?  html制作网站的步骤有哪些,iapp如何添加网页?  在线制作视频的网站有哪些,电脑如何制作视频短片?  建站之星代理商如何保障技术支持与售后服务?  公司网站设计制作厂家,怎么创建自己的一个网站?  如何在云主机上快速搭建网站?  制作门户网站的参考文献在哪,小说网站怎么建立?  如何通过FTP服务器快速搭建网站?  实现点击下箭头变上箭头来回切换的两种方法【推荐】  韩国代理服务器如何选?解析IP设置技巧与跨境访问优化指南  电影网站制作价格表,那些提供免费电影的网站,他们是怎么盈利的?  PHP 500报错的快速解决方法  专业网站设计制作公司,如何制作一个企业网站,建设网站的基本步骤有哪些?  怎么制作一个起泡网,水泡粪全漏粪育肥舍冬季氨气超过25ppm,可以有哪些措施降低舍内氨气水平?  家庭建站与云服务器建站,如何选择更优?  建站之星如何防范黑客攻击与数据泄露?  广州美橙建站如何快速搭建多端合一网站?  如何通过云梦建站系统实现SEO快速优化?  国美网站制作流程,国美电器蒸汽鍋怎么用官方网站?  深入理解Android中的xmlns:tools属性  如何在腾讯云免费申请建站?  手机网站制作平台,手机靓号代理商怎么制作属于自己的手机靓号网站?  建站之星如何通过成品分离优化网站效率?  北京企业网站设计制作公司,北京铁路集团官方网站?  如何用免费手机建站系统零基础打造专业网站?  如何快速生成高效建站系统源代码? 

您的项目需求

*请认真填写需求信息,我们会在24小时内与您取得联系。