原生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 相关文章推荐
javascript 得到文件后缀名的思路及实现
May 09 Javascript
javascript框架设计读书笔记之模块加载系统
Dec 02 Javascript
JS中call/apply、arguments、undefined/null方法详解
Feb 15 Javascript
基于Bootstrap实现的下拉菜单手机端不能选择菜单项的原因附解决办法
Jul 22 Javascript
将form表单通过ajax实现无刷新提交的简单实例
Oct 12 Javascript
Jquery实现上下移动和排序代码
Oct 17 Javascript
jquery实现刷新随机变化样式特效(tag标签样式)
Feb 03 Javascript
详解Vue.js组件可复用性的混合(mixin)方式和自定义指令
Sep 06 Javascript
微信小程序webview实现长按点击识别二维码功能示例
Jan 24 Javascript
详解element-ui中el-select的默认选择项问题
Aug 02 Javascript
layui动态加载多表头的实例
Sep 05 Javascript
JavaScript如何使用插值实现图像渐变
Jun 28 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中的实现trim函数代码
2007/03/19 PHP
php实现将二维关联数组转换成字符串的方法详解
2017/07/31 PHP
laravel实现批量更新多条记录的方法示例
2017/10/22 PHP
Ajax+PHP实现的分类列表框功能示例
2019/02/11 PHP
JS获取scrollHeight问题想到的标准问题
2007/05/27 Javascript
extjs grid取到数据而不显示的解决
2008/12/29 Javascript
基于MooTools的很有创意的滚动条时钟动画
2010/11/14 Javascript
js中settimeout方法加参数
2014/02/28 Javascript
JS截取url中问号后面参数的值信息
2014/04/29 Javascript
一款基jquery超炫的动画导航菜单可响应单击事件
2014/11/02 Javascript
JavaScript变量的作用域全解析
2015/08/14 Javascript
JQ选择器_选择同类元素的第N个子元素的实现方法
2016/09/08 Javascript
原生js实现中奖信息无间隙滚动效果
2017/01/18 Javascript
js实现简单的选项卡效果
2017/02/23 Javascript
详解小程序开发经验:多页面数据同步
2019/05/18 Javascript
用原生JS实现爱奇艺首页导航栏代码实例
2019/09/19 Javascript
[52:15]2014 DOTA2国际邀请赛中国区预选赛5.21 HGT VS LGD-GAMING
2014/05/23 DOTA
[02:15]2014DOTA2国际邀请赛 专访LGD.lin小兔子是大腿
2014/07/14 DOTA
Python  __getattr__与__setattr__使用方法
2008/09/06 Python
python的socket编程入门
2018/01/29 Python
详解Python3注释知识点
2019/02/19 Python
解决django model修改添加字段报错的问题
2019/11/18 Python
使用Pandas的Series方法绘制图像教程
2019/12/04 Python
python列表生成器迭代器实例解析
2019/12/19 Python
Python3.9又更新了:dict内置新功能
2020/02/28 Python
python实现横向拼接图片
2020/03/23 Python
ASP.NET Core中的配置详解
2021/02/05 Python
德国体育用品网上商店:SC24.com
2016/08/01 全球购物
请解释virtual关键字的含义
2015/06/17 面试题
园林设计师自荐信
2013/11/18 职场文书
校运会广播稿100字
2014/01/27 职场文书
技术股东合作协议书
2014/12/02 职场文书
事业单位工作人员年度考核个人总结
2015/02/12 职场文书
党员年终个人总结
2015/02/14 职场文书
会计工作能力自我评价
2015/03/05 职场文书
高中政治教学反思
2016/02/23 职场文书