当前位置:首页 > 日记 > 正文

JavaScript实现父子dom同时绑定两个点击事件,一个用捕获,一个用冒泡时执行顺序的方法

JavaScript实现父子dom同时绑定两个点击事件,一个用捕获,一个用冒泡时执行顺序的方法

本文实例讲述了JavaScript实现父子dom同时绑定两个点击事件,一个用捕获,一个用冒泡时执行顺序的方法。分享给大家供大家参考,具体如下:

事件的执行顺序绝对是让人头疼的问题。当父元素与子元素都绑定了多个事件,且有的绑定在冒泡阶段、有的绑定在捕获阶段时,事件的触发顺序如何?如果你只关心这个问题,请直接下滑到3. 绑定多个事件,且由用户行为触发。如果你想细致了解JavaScript中的事件发生,请慢慢阅读。

1. 原生事件的发生顺序

一般来讲,当为一个a标签添加click事件以后,点击这个标签,会先执行绑定的事件、后跳转页面。一个input绑定blur事件以后,你在input里输入完内容,点击提交按钮,会先发生blur事件,后发生click事件。当然,这是一般来讲。我在一个React项目中曾经发生表单提交时,先发生click事件,blur事件没有来得及发生,造成表单内容没有检验就提交到后台,原因我至今没有找到,解决办法是在click事件上加一个50ms的延迟。

2. 自定义事件

JavaScript中也支持手动触发事件,请看下面代码。

a.addEventListener('click', function(){  console.log(input.value);  console.log(this.getAttribute('href'));  console.log(location.href);}, false); //a是我已经通过id获得好的一个a标签var event = document.createEvent('HTMLEvents'); // initEvent接受3个参数: 事件类型,是否冒泡,是否阻止浏览器的默认行为event.initEvent('click', true, true);event.eventType = 'click';//触发a上绑定的自定义事件a.dispatchEvent(event);//注:jQuery中有更简单的trigger()方法实现自定义事件功能

JavaScript中自定义事件的类型有(即document.createEvent('HTMLEvents')中的参数):

1. UIEvents:一般化的UI事件。
2. MouseEvents:一般化的鼠标事件。
3. MutationEvents:一般化的DOM变动事件。
4. HTMLEvents:一般化的HTML事件。

自定义事件的发生比较容易控制,你什么时候触发(dispatchEvent/fireEvent)它,它就什么时候发生。

3. 绑定多个事件,且由用户行为触发

这个情况最复杂,也是标题中的情况:父元素与子元素都绑定多个事件,且有的事件在捕获阶段、有的事件在冒泡阶段。

下面这个例子,父元素div绑定两个事件(一个冒泡阶段、一个捕获阶段),子元素也是这种情况。事件触发顺序如何。

var btn = document.querySelector('button');var div = document.querySelector('div');btn.addEventListener('click', function(){  console.log('bubble','btn');},false);btn.addEventListener('click', function(){  console.log('capture','btn');},true);div.addEventListener('click', function(){  console.log('bubble','div');},false);div.addEventListener('click', function(){  console.log('capture','div');},true);

执行结果:

乍一看这个结果有些乱,但仔细分析可以得出结论

绑定在被点击元素的事件是按照代码顺序发生,其他元素通过冒泡或者捕获“感知”的事件,按照W3C的标准,先发生捕获事件,后发生冒泡事件。所有事件的顺序是:其他元素捕获阶段事件 -> 本元素代码顺序事件 -> 其他元素冒泡阶段事件 。

更多关于JavaScript相关内容感兴趣的读者可查看本站专题:《JavaScript事件相关操作与技巧大全》、《JavaScript时间与日期操作技巧总结》、《JavaScript切换特效与技巧总结》、《JavaScript查找算法技巧总结》、《JavaScript动画特效与技巧汇总》、《JavaScript错误与调试技巧总结》、《JavaScript数据结构与算法技巧总结》、《JavaScript遍历算法与技巧总结》及《JavaScript数学运算用法总结》

希望本文所述对大家JavaScript程序设计有所帮助。

相关文章

qq安全中心申诉进度教程

qq安全中心申诉进度教程

安全中心,教程,方法,进度,电脑软件,  我提交了QQ申诉申请,我怎么知道申诉进度怎么样呢?怎么查询呢?还有如果我申诉成功了接来该怎么做呢?今天小编给你分享一下,欢迎阅读。qq安全中心申诉进度的方法由于提交申诉后你的QQ无法登录了,因此需…

PPT2013怎么设置自动显示当前页码

PPT2013怎么设置自动显示当前页码

显示,方法,页码,设置自动,电脑软件,  PPT中添加页码时会遇到一系列问题,例如怎么可以让图片的页码变成:1/50,这样的。大概的就是说,我共有50张幻灯片,现在放的是第1张。我只可以做到加成第一个,就是有个页脚1.但做不到可以显示总共的也在里面。…

excel表格边框变细的方法excel表格

excel表格边框变细的方法excel表格

边框,方法,表格,变细,电脑软件,  在Excel中录入数据都需要利用表格,而有时候会觉得表格的边框太粗了,需要变细,这个时候我们只要设置一下就好了。下面是小编带来的关于excel表格边框变细的方法,欢迎阅读!excel表格边框变细的方法边框变细步骤…

Excel制作突出数据的扇形饼状图表

Excel制作突出数据的扇形饼状图表

饼状图,数据,扇形,方法,电脑软件,  Excel表格的数据想要做成扇形的饼状图,制作突出数据的扇形饼状图表,能够很好的突出数据。以下是小编为您带来的关于Excel制作突出数据的扇形饼状图表,希望对您有所帮助。Excel制作突出数据的扇形饼状图表1…

WPS演示怎么设置自动保存时间WPS演

WPS演示怎么设置自动保存时间WPS演

方法,步骤,设置自动,演示,时间,  使用WPS演示的一系列操作看起来很简单,真正自己制作起来却经历了不少挑战;当我们费尽心血时间完成制作,却因为小小的失误而导致文档损坏或者是丢失,没有来得及保存,前功尽弃,这可是令人崩溃的事情,那么下面小…

excel表格如何设置日期转换

excel表格如何设置日期转换

日期转换,方法,设置,表格,如何设置,  Excel应用中经常遇到这样的问题,如19870607日期格式需要转换为1987-06-07以及计算工龄年限之类的问题。哪么要怎样设置日期转换呢?下面给大家分享Excel设置日期转换的方法吧,希望能帮到大家。Excel设置…

AngularJs 禁止模板缓存的方法

AngularJs 禁止模板缓存的方法

模板,方法,缓存,电脑软件,AngularJs,本文介绍了AngularJs 禁止模板缓存的方法,分享给大家,也给自己留个笔记,具有如下:因为AngularJs的特性(or 浏览器本身的缓存?),angular默认的HTML模板加载都会被缓存起来。导致每次修改完模板之后都得经常需要清…

WPS文字表格中数据怎么求和WPS文字

WPS文字表格中数据怎么求和WPS文字

文字,数据,方法,步骤,表格,  用过电脑的朋友都知道在最早的Word2003版本中如果有表格,并且里面有数据的话,是不能自动求其和的。今天小编给大家分享的是:WPS文字中表格中的数据如何求和。这样以后就不用再一个一个去计算了。希望对你有帮助!W…

qq安全中心锁定游戏教程

qq安全中心锁定游戏教程

安全中心,锁定,教程,方法,游戏,  怎么让你玩的腾讯游戏更加安全?qq安全中心游戏锁就是你开启游戏之后每次都要输入一次验证码,不输人验证码是进不去的,然而验证码都在你的手机QQ安全中心上,所以非常安全。今天小编给你分享一下qq安全中心锁…

怎么利用c语言创建excel文件利用c

怎么利用c语言创建excel文件利用c

文件,语言,方法,电脑软件,excel,  要利用c语言创建excel文件在把它导入excel其实很简单,下面就和小编一起看看怎么利用c语言创建excel文件,希望对你有帮助!利用c语言创建excel文件的方法如果数据简单的话,可以使用CSV(逗号分隔值)格式的文件…

jquery dialog获取焦点的方法

jquery dialog获取焦点的方法

方法,获取焦点,电脑软件,jquery,dialog,本文实例讲述了jquery dialog获取焦点的方法。分享给大家供大家参考,具体如下:$(document).ready(function () { //初始化新增申请对话框 $("#addBusinessTrip").dialog({ open: function (e…

photoshop5.0软件怎么抠图

photoshop5.0软件怎么抠图

抠图,方法,电脑软件,  抠图是很多同学都想要学习的,在photoshop中抠图的方法太多了。其实这个也不算太难,下面就让小编告诉你photoshop5.0软件怎么抠图的方法,一起学习吧。photoshop5.0软件抠图的方法开启PS5软件,打开需要抠图的素材。(文件>…