详解addEventListener的三个参数之useCapture


Posted in Javascript onMarch 16, 2015

addEventListener 有三个参数:第一个参数表示事件名称(不含 on,如 "click");第二个参数表示要接收事件处理的函数;第三个参数为 useCapture,本文就讲解它。

<div id="outDiv">

  <div id="middleDiv">

    <div id="inDiv">请在此点击鼠标。</div>

  </div>

</div>

<div id="info"></div>
var outDiv = document.getElementById("outDiv");

var middleDiv = document.getElementById("middleDiv");

var inDiv = document.getElementById("inDiv");

var info = document.getElementById("info");

outDiv.addEventListener("click", function () { info.innerHTML += "outDiv" + "<br>"; }, false);

middleDiv.addEventListener("click", function () { info.innerHTML += "middleDiv" + "<br>"; }, false);

inDiv.addEventListener("click", function () { info.innerHTML += "inDiv" + "<br>"; }, false);

上述是我们测试的代码,根据 info 的显示来确定触发的顺序,有三个 addEventListener,而 useCapture 可选值为 true 和 false,所以 2*2*2,可以得出 8 段不同的程序。

•全为 false 时,触发顺序为:inDiv、middleDiv、outDiv;
•全为 true 时,触发顺序为:outDiv、middleDiv、inDiv;
•outDiv 为 true,其他为 false 时,触发顺序为:outDiv、inDiv、middleDiv;
•middleDiv 为 true,其他为 false 时,触发顺序为:middleDiv、inDiv、outDiv;
•……

最终得出如下结论:

•true 的触发顺序总是在 false 之前;
•如果多个均为 true,则外层的触发先于内层;
•如果多个均为 false,则内层的触发先于外层。

以上就是本文的全部内容了,希望大家能够喜欢。

Javascript 相关文章推荐
验证用户是否修改过页面的数据的实现方法
Sep 26 Javascript
jQuery实现 注册时选择阅读条款 左右移动
Apr 11 Javascript
『jQuery』名称冲突使用noConflict方法解决
Apr 22 Javascript
下拉列表select 由左边框移动到右边示例
Dec 04 Javascript
cookie中的path与domain属性详解
Dec 18 Javascript
利用Keydown事件阻止用户输入实现代码
Mar 11 Javascript
JavaScript中解析JSON数据的三种方法
Jul 03 Javascript
图片旋转、鼠标滚轮缩放、镜像、切换图片js代码
Dec 13 Javascript
Node.js使用Express创建Web项目详细教程
Mar 31 Javascript
Node+Express+MongoDB实现登录注册功能实例
Apr 23 Javascript
Angular4实现图片上传预览路径不安全的问题解决
Dec 25 Javascript
微信小程序通过js实现瀑布流布局详解
Aug 28 Javascript
解决Jquery向页面append新元素之后事件的绑定问题
Mar 16 #Javascript
jquery中radio checked问题
Mar 16 #Javascript
jquery中JSON的解析方式
Mar 16 #Javascript
浅谈js中的闭包
Mar 16 #Javascript
js完美实现@提到好友特效(兼容各大浏览器)
Mar 16 #Javascript
JavaScript DSL 流畅接口(使用链式调用)实例
Mar 15 #Javascript
JavaScript中的DSL元编程介绍
Mar 15 #Javascript
You might like
php设计模式小结
2013/02/15 PHP
php清空(删除)指定目录下的文件,不删除目录文件夹的实现代码
2014/09/04 PHP
php调用shell的方法
2014/11/05 PHP
PHP实现动态压缩js与css文件的方法
2018/05/02 PHP
ExtJs使用IFrame的实现代码
2010/03/24 Javascript
浅析js封装和作用域
2013/07/09 Javascript
web css实现整站样式互相切换
2013/10/29 Javascript
jQuery实用技巧必备(下)
2015/11/03 Javascript
关于JS中的方法是否加括号的问题
2016/07/27 Javascript
webpack 3.X学习之多页面打包的方法
2018/09/04 Javascript
vuejs router history 配置到iis的方法
2018/09/20 Javascript
react native 原生模块桥接的简单说明小结
2019/02/26 Javascript
vue webpack重写cookie路径的方法
2019/07/10 Javascript
jquery 键盘事件 keypress() keydown() keyup()用法总结
2019/10/23 jQuery
JS实现transform实现扇子效果
2020/01/17 Javascript
Linux下用Python脚本监控目录变化代码分享
2015/05/21 Python
python相似模块用例
2016/03/04 Python
Python用Bottle轻量级框架进行Web开发
2016/06/08 Python
Python使用selenium实现网页用户名 密码 验证码自动登录功能
2018/05/16 Python
TensorFlow实现卷积神经网络
2018/05/24 Python
Python面向对象之类的内置attr属性示例
2018/12/14 Python
Django框架创建mysql连接与使用示例
2019/07/29 Python
tensorflow多维张量计算实例
2020/02/11 Python
3分钟看懂Python后端必须知道的Django的信号机制
2020/07/26 Python
python 两种方法删除空文件夹
2020/09/29 Python
Python3+Appium安装及Appium模拟微信登录方法详解
2021/02/16 Python
python 实现有道翻译功能
2021/02/26 Python
45个非常奇妙的CSS3 特性应用示例
2012/01/01 HTML / CSS
纯css3制作煽动翅膀的蝴蝶的示例
2018/04/23 HTML / CSS
猫咪家具:CatsPlay
2018/11/03 全球购物
巴西购物网站:Onofre Agora
2020/06/08 全球购物
函数只定义了一次, 调用了一次, 但编译器提示非法重定义了-什么问题?
2014/10/03 面试题
退伍老兵事迹材料
2014/01/31 职场文书
婚礼答谢宴主持词
2014/03/14 职场文书
2014年四风个人对照检查及整改措施
2014/10/28 职场文书
驾驶员管理制度范本
2015/08/06 职场文书