原生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通用函数
May 09 Javascript
Javascript 获取链接(url)参数的方法[正则与截取字符串]
Feb 09 Javascript
json的定义、标准格式及json字符串检验
May 11 Javascript
深入探寻seajs的模块化与加载方式
Apr 14 Javascript
javascript检测flash插件是否被禁用的方法
Jan 14 Javascript
动态加载js文件简单示例
Apr 21 Javascript
jQuery模拟Marquee实现无缝滚动效果完整实例
Sep 29 Javascript
基于bootstrap按钮式下拉菜单组件的搜索建议插件
Mar 25 Javascript
jquery实现点击a链接,跳转之后,该a链接处显示背景色的方法
Jan 18 jQuery
php结合js实现多条件组合查询
May 28 Javascript
简述Vue中容易被忽视的知识点
Dec 09 Javascript
详解vue身份认证管理和租户管理
May 25 Vue.js
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
如何用C语言编写PHP扩展的详解
2013/06/13 PHP
php+xml结合Ajax实现点赞功能完整实例
2015/01/30 PHP
破解Session cookie的方法
2006/07/28 Javascript
JavaScript 学习笔记 Black.Caffeine 09.11.28
2009/11/30 Javascript
js 取时间差去掉周六周日实现代码
2012/12/25 Javascript
JS预览图像将本地图片显示到浏览器上
2013/08/25 Javascript
中止javascript执行的方法
2014/02/14 Javascript
JavaScript 异常处理 详解
2015/02/06 Javascript
浅谈JavaScript中null和undefined
2015/07/09 Javascript
js实现兼容性好的微软官网导航下拉菜单效果
2015/09/07 Javascript
js 自带的sort() 方法全面了解
2016/08/16 Javascript
AngularJS入门示例之Hello World详解
2017/01/04 Javascript
那些精彩的JavaScript代码片段
2017/01/12 Javascript
原生js实现放大镜特效
2017/03/08 Javascript
JavaScript程序设计高级算法之动态规划实例分析
2017/11/24 Javascript
微信小程序在其他页面监听globalData中值的变化
2019/07/15 Javascript
layer实现弹出层自动调节位置
2019/09/05 Javascript
JavaScript实现浏览器网页自动滚动并点击的示例代码
2020/12/05 Javascript
python实现mysql的读写分离及负载均衡
2018/02/04 Python
python3实现带多张图片、附件的邮件发送
2019/08/10 Python
Django多进程滚动日志问题解决方案
2019/12/17 Python
python基于event实现线程间通信控制
2020/01/13 Python
Python可视化工具如何实现动态图表
2020/10/23 Python
python 爬虫之selenium可视化爬虫的实现
2020/12/04 Python
通过canvas转换颜色为RGBA格式及性能问题的解决
2019/11/22 HTML / CSS
萌新的HTML5 入门指南
2020/11/06 HTML / CSS
C语言开发工程师测试题
2016/12/20 面试题
商场端午节活动方案
2014/01/29 职场文书
班组拓展活动方案
2014/08/14 职场文书
邻里守望志愿服务活动方案
2014/08/15 职场文书
党的群众路线教育实践活动制度建设计划
2014/11/03 职场文书
《秦兵马俑》教学反思
2016/02/24 职场文书
Vue中插槽slot的使用方法与应用场景详析
2021/06/08 Vue.js
vite+vue3.0+ts+element-plus快速搭建项目的实现
2021/06/24 Vue.js
叶县这家生产军用电台的兵工厂,人称“四机部”,走出一上将
2022/02/18 无线电
Win11如何设置右键单击显示所有选项?Win11右键单击显示所有选项设置教程
2022/04/08 数码科技