原生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 相关文章推荐
JS实现Enter键跳转及控件获得焦点
Aug 12 Javascript
jquery获取复选框被选中的值
Mar 22 Javascript
Javascript中prototype属性实现给内置对象添加新的方法
May 14 Javascript
谈谈JavaScript类型系统之Math
Jan 06 Javascript
js获取json中key所对应的value值的简单方法
Jun 17 Javascript
xmlplus组件设计系列之图标(ICON)(1)
May 05 Javascript
bootstrap时间控件daterangepicker使用方法及各种小bug修复
Oct 25 Javascript
JavaScript原生实现观察者模式的示例
Dec 15 Javascript
JS实现匀速与减速缓慢运动的动画效果封装示例
Aug 27 Javascript
微信小程序利用云函数获取手机号码
Dec 17 Javascript
vue proxy 的优势与使用场景实现
Jun 15 Javascript
微信小程序动态评分展示/五角星展示/半颗星展示/自定义长度展示功能的实现
Jul 22 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
在任意字符集下正常显示网页的方法一
2007/04/01 PHP
php中数据库连接方式pdo和mysqli对比分析
2015/02/25 PHP
php从数据库查询结果生成树形列表的方法
2015/04/17 PHP
PHP使用curl模拟post上传及接收文件的方法
2016/03/04 PHP
php socket通信简单实现
2016/11/18 PHP
Javascript的IE和Firefox兼容性汇编
2006/07/01 Javascript
Prototype Hash对象 学习
2009/07/19 Javascript
jQuery 处理网页内容的实现代码
2010/02/15 Javascript
JavaScript this调用规则说明
2010/03/08 Javascript
用Javascript实现Sleep暂停功能代码
2010/09/03 Javascript
firebug的一个有趣现象介绍
2011/11/30 Javascript
JavaScript实现自动变换表格边框颜色
2015/05/08 Javascript
浅谈jQuery的offset()方法及示例分享
2015/07/17 Javascript
JS实现的仿QQ空间图片弹出效果代码
2016/02/23 Javascript
浅谈JS中json数据的处理
2016/06/30 Javascript
JavaScript 计算笛卡尔积实例详解
2016/12/02 Javascript
浅析Ajax语法
2016/12/05 Javascript
详解vuelidate 对于vueJs2.0的验证解决方案
2017/03/09 Javascript
利用nvm管理多个版本的node.js与npm详解
2017/11/02 Javascript
vue cli使用绝对路径引用图片问题的解决
2017/12/06 Javascript
快速解决select2在bootstrap模态框中下拉框隐藏的问题
2018/08/10 Javascript
jQuery简单实现根据日期计算星期几的方法
2019/01/09 jQuery
ES6 Set结构的应用实例分析
2019/06/26 Javascript
基于vue、react实现倒计时效果
2019/08/26 Javascript
nodejs的安装使用与npm的介绍
2019/09/11 NodeJs
基于react项目打包css引用路径错误解决方案
2020/10/28 Javascript
jQuery列表动态增加和删除的实现方法
2020/11/05 jQuery
js删除对象中的某一个字段的方法实现
2021/01/11 Javascript
python Django批量导入不重复数据
2016/03/25 Python
Python类属性的延迟计算
2016/10/22 Python
Python进阶之使用selenium爬取淘宝商品信息功能示例
2019/09/16 Python
利用pandas合并多个excel的方法示例
2019/10/10 Python
python框架flask表单实现详解
2019/11/04 Python
Html5移动端div固定到底部实现底部导航条的几种方式
2021/03/09 HTML / CSS
2014年药房工作总结
2014/11/22 职场文书
python 爬取哔哩哔哩up主信息和投稿视频
2021/06/07 Python