原生js事件的添加和删除的封装


Posted in Javascript onJuly 01, 2014

在IE浏览器中添加或删除事件用attachEvent、detachEvent。在其他标准浏览器中则用addEventListener、removeEventListener。下面的对事件的添加和删除做了封装。直接看代码吧!

/**
* @description 事件绑定,兼容各浏览器
* @param target
* 事件触发对象
* @param type
* 事件
* @param func
* 事件处理函数
*/
function bind(target, type, func) {
if (target.addEventListener) {// 非ie 和ie9
target.addEventListener(type, func, false);
} else if (target.attachEvent) { // ie6到ie8
target.attachEvent("on" + type, func);
} else {
target["on" + type] = func; // ie5
}
}
/**
* @description 事件移除,兼容各浏览器
* @param target
* 事件触发对象
* @param type
* 事件
* @param func
* 事件处理函数
*/
function unbind(target, type, func) {
if (target.removeEventListener) {
target.removeEventListener(type, func, false);
} else if (target.detachEvent) {
target.detachEvent("on" + type, func);
} else {
target["on" + type] = null;
}
}

其他补充关于addEventListener第三个参数的含义

addEventListener的第三个参数

W3C DOM里用来新增触发事件的函数叫AddEventListener,不过我一直不知道这个函数的第三个参数是要做什么用的,总是随便设,也没发现差异再哪,前两天看ppk on javascript终于看到说明了,至于很久以前就有的DOM的标准文件,我其实根本没去找过这个参数的资讯。

这个参数叫做useCapture,是一个boolean值,就是true or false,如果送出true的话就是浏览器会使用Capture方式,false的话是Bubbling,只有在特定状况下才会有影响,通常建议是false,而会有影响的情形是目标元素(target element)有祖先元素(ancestor element),而且也有同样的事件对应函数,我想,看图会比较清楚。

原生js事件的添加和删除的封装

范例有两层的div方块

像这张图所显示的,我的范例有两层div元素,而且都设定有click事件,一般来说,如果我在内层蓝色的元素上click不只会触发蓝色元素的click事件,还会同时触发红色元素的click事件,而useCapture这个参数就是在控制这时候两个click事件的先后顺序。如果是false,那就会使用bubbling,他是从内而外的流程,所以会先执行蓝色元素的click事件再执行红色元素的click事件,如果是true,那就是capture,和bubbling相反是由外而内,会先执行红色元素的click事件才执行蓝色元素的click事件。附上两个范例,capture和bubbling,两个档案只有差在此一参数不同,可以发现事件的发生顺序不一样了。

那如果不同层的元素使用的useCapture不同呢?就是会先从最外层元素往目标元素寻找设定为capture的事件,到达目标元素执行目标元素的事件后,再寻原路往外寻找设定为bubbling的事件。

Javascript 相关文章推荐
WebGame《逆转裁判》完整版 代码下载(1月24日更新)
Jan 29 Javascript
msn上的tab功能Firefox对childNodes处理的一个BUG
Jan 21 Javascript
javascript实现的距离现在多长时间后的一个格式化的日期
Oct 29 Javascript
js 数组克隆方法 小结
Mar 20 Javascript
写自已的js类库需要的核心代码
Jul 16 Javascript
jquery indexOf使用方法
Aug 19 Javascript
jQuery中index()方法用法实例
Dec 27 Javascript
使用堆实现Top K算法(JS实现)
Dec 25 Javascript
JavaScript实现多种排序算法
Feb 24 Javascript
100行代码理解和分析vue2.0响应式架构
Mar 09 Javascript
微信小程序实现带刻度尺滑块功能
Mar 29 Javascript
JavaScript高级函数应用之分时函数实例分析
Aug 03 Javascript
jQuery的:parent选择器定义和用法
Jul 01 #Javascript
jQuery 写的简单打字游戏可以提示正确和错误的次数
Jul 01 #Javascript
JavaScript利用正则表达式去除日期中的“-”
Jul 01 #Javascript
jquery实现图片按比例缩放示例
Jul 01 #Javascript
js 实现的可折叠留言板(附源码下载)
Jul 01 #Javascript
JavaScript利用append添加元素报错的解决方法
Jul 01 #Javascript
JS中attr和prop属性的区别以及优先选择示例介绍
Jun 30 #Javascript
You might like
自己在做项目过程中学到的PHP知识收集
2012/08/20 PHP
php过滤html中的其他网站链接的方法(域名白名单功能)
2014/04/24 PHP
PHP的PDO常用类库实例分析
2016/04/07 PHP
PHP序列化的四种实现方法与横向对比
2018/11/29 PHP
PHP聊天室简单实现方法详解
2018/12/08 PHP
PDO::getAttribute讲解
2019/01/28 PHP
一端时间轮换的广告
2006/06/26 Javascript
jquery实现背景墙聚光灯效果示例分享
2014/03/02 Javascript
javaScript的函数对象的声明详解
2015/02/06 Javascript
javascript类型系统——undefined和null全面了解
2016/07/13 Javascript
javascript循环链表之约瑟夫环的实现方法
2017/01/16 Javascript
解决AjaxFileupload 上传时会出现连接重置的问题
2017/07/07 Javascript
bootstrap多层模态框滚动条消失的问题
2017/07/21 Javascript
微信小程序授权获取用户详细信息openid的实例详解
2017/09/20 Javascript
关于layui的动态图标不显示的解决方法
2019/09/04 Javascript
vue实现页面内容禁止选中功能,仅输入框和文本域可选
2019/11/09 Javascript
Angular如何由模板生成DOM树的方法
2019/12/23 Javascript
原生JS实现留言板
2020/03/26 Javascript
Python线程中对join方法的运用的教程
2015/04/09 Python
详解Python map函数及Python map()函数的用法
2017/11/16 Python
Python的numpy库中将矩阵转换为列表等函数的方法
2018/04/04 Python
tensorflow 获取变量&打印权值的实例讲解
2018/06/14 Python
python调用摄像头显示图像的实例
2018/08/03 Python
网易2016研发工程师编程题 奖学金(python)
2019/06/19 Python
Python帮你识破双11的套路
2019/11/11 Python
Ubuntu16安装Python3.9的实现步骤
2020/12/15 Python
FOREO官方网站:LUNA露娜洁面仪
2016/11/28 全球购物
美国婴儿服装购物网站:Gerber Childrenswear
2020/05/06 全球购物
药学专业大学生个人的自我评价
2013/11/04 职场文书
回门宴新郎答谢词
2014/01/12 职场文书
函授本科自我鉴定
2014/02/04 职场文书
广告创意求职信
2014/03/17 职场文书
老人祝寿主持词
2014/03/28 职场文书
财务部副经理岗位职责范本
2014/06/17 职场文书
Python requests库参数提交的注意事项总结
2021/03/29 Python
Python写情书? 10行代码展示如何把情书写在她的照片里
2022/04/21 Python