原生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 相关文章推荐
从零开始学习jQuery (十一) 实战表单验证与自动完成提示插件
Feb 23 Javascript
javascript使用数组的push方法完成快速排序
Sep 15 Javascript
javascript框架设计读书笔记之字符串的扩展和修复
Dec 02 Javascript
js正则表达式验证邮件地址
Nov 12 Javascript
深入理解JavaScript中的对象复制(Object Clone)
May 18 Javascript
JS日程管理插件FullCalendar简单实例
Feb 07 Javascript
JS验证码实现代码
Sep 14 Javascript
详解开源的JavaScript插件化框架MinimaJS
Oct 26 Javascript
Vue iview-admin框架二级菜单改为三级菜单的方法
Jul 03 Javascript
js实现动态添加上传文件页面
Oct 22 Javascript
小程序Request的另类用法详解
Aug 09 Javascript
js将URL网址转为16进制加密与解密函数
Mar 04 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抓即时股票信息
2006/10/09 PHP
PHP curl 获取响应的状态码的方法
2014/01/13 PHP
PHP判断是否有Get参数的方法
2014/05/05 PHP
thinkphp3.2.3 分页代码分享
2016/07/28 PHP
php封装的page分页类完整实例代码
2020/02/01 PHP
actionscript与javascript的区别
2011/05/25 Javascript
JQuery调用WebServices的方法和4个实例
2014/05/06 Javascript
JSP中使用JavaScript动态插入删除输入框实现代码
2014/06/13 Javascript
JavaScript实现向OL列表内动态添加LI元素的方法
2015/03/21 Javascript
nodejs导出excel的方法
2015/06/30 NodeJs
Javascript实现获取及设置光标位置的方法
2015/07/21 Javascript
使用Promise解决多层异步调用的简单学习心得
2016/05/17 Javascript
Vue.js实现无限加载与分页功能开发
2016/11/03 Javascript
基于jQuery实现简单人工智能聊天室
2017/02/10 Javascript
node文件上传功能简易实现代码
2017/06/16 Javascript
JavaScript实现QQ列表展开收缩扩展功能
2017/10/30 Javascript
nodejs实现套接字服务功能详解
2018/06/21 NodeJs
[01:07:46]完美世界DOTA2联赛循环赛 Magma vs IO BO2第二场 11.01
2020/11/02 DOTA
[50:44]DOTA2-DPC中国联赛 正赛 SAG vs Dragon BO3 第二场 2月22日
2021/03/11 DOTA
Python算术运算符实例详解
2017/05/31 Python
python enumerate函数的使用方法总结
2017/11/15 Python
自适应线性神经网络Adaline的python实现详解
2019/09/30 Python
WxPython实现无边框界面
2019/11/18 Python
Python实现把多维数组展开成DataFrame
2019/11/30 Python
Python轻量级web框架bottle使用方法解析
2020/06/13 Python
Ibatis的核心配置文件都有什么
2014/09/08 面试题
测试时代收集的软件测试面试题
2013/09/25 面试题
创业计划书怎样才能打动风投
2014/01/01 职场文书
检查接待方案
2014/02/27 职场文书
预备党员公开承诺书
2014/05/28 职场文书
大学生创业事迹材料
2014/12/30 职场文书
上课讲话检讨书范文
2015/05/07 职场文书
校园新闻稿范文
2015/07/18 职场文书
2016年员工年度考核评语
2015/12/02 职场文书
在Spring-Boot中如何使用@Value注解注入集合类
2021/08/02 Java/Android
电脑只能进入安全模式无法正常启动的解决办法
2022/04/08 数码科技