原生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 相关文章推荐
“不能执行已释放的Script代码”错误的原因及解决办法
Sep 09 Javascript
jQuery dialog 异步调用ashx,webservice数据的代码
Aug 03 Javascript
fmt:formatDate的输出格式详解
Jan 09 Javascript
使用Chrome浏览器调试AngularJS应用的方法
Jun 18 Javascript
cocos2dx骨骼动画Armature源码剖析(三)
Sep 08 Javascript
AngularJS入门教程之AngularJS表达式
Apr 18 Javascript
jQuery的实例及必知重要的jQuery选择器详解
May 20 Javascript
无缝滚动的简单实现代码(推荐)
Jun 07 Javascript
Vue.js每天必学之方法与事件处理器
Sep 06 Javascript
iscroll动态加载数据完美解决方法
Jul 18 Javascript
Angular Material Icon使用详解
Nov 07 Javascript
微信小程序云开发使用方法新手初体验
May 16 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
上海无线电三厂简史修改版
2021/03/01 无线电
php定时执行任务设置详解
2015/02/06 PHP
PHP中捕获超时事件的方法实例
2015/02/12 PHP
PHP学习记录之数组函数
2018/06/01 PHP
点击下载链接 弹出页面实现代码
2009/10/01 Javascript
javascript之学会吝啬 精简代码
2010/04/25 Javascript
一个收集图片的bookmarlet(js 刷新页面中的图片)
2010/05/27 Javascript
jQuery boxy弹出层插件中文演示及使用讲解
2011/02/24 Javascript
JavaScript函数参数使用带参数名的方式赋值传入的方法
2015/03/19 Javascript
javascript获取当前的时间戳的方法汇总
2015/07/26 Javascript
jQuery 获取多选框的值及多选框中文的函数
2016/05/16 Javascript
Node.js的npm包管理器基础使用教程
2016/05/26 Javascript
浅述Javascript的外部对象
2016/12/07 Javascript
Jquery Easyui进度条组件Progress使用详解(8)
2020/03/26 Javascript
Bootstrap实现各种进度条样式详解
2017/04/13 Javascript
bootstrap手风琴折叠示例代码分享
2017/05/22 Javascript
利用webstrom调试Vue.js单页面程序的方法教程
2017/06/06 Javascript
Js判断H5上下滑动方向及滑动到顶部和底部判断的示例代码
2017/11/15 Javascript
Vue表单类的父子组件数据传递示例
2018/05/03 Javascript
jQuery实现form表单基于ajax无刷新提交方法实例代码
2019/11/04 jQuery
Python实现把回车符\r\n转换成\n
2015/04/23 Python
Python编程实现二叉树及七种遍历方法详解
2017/06/02 Python
python单例模式实例解析
2018/08/28 Python
python实现狄克斯特拉算法
2019/01/17 Python
face++与python实现人脸识别签到(考勤)功能
2019/08/28 Python
详解Pycharm与anaconda安装配置指南
2020/08/25 Python
CSS3 选择器 伪类选择器介绍
2012/01/21 HTML / CSS
全球最大的在线旅游公司:Expedia
2017/11/16 全球购物
Clarks西班牙官方在线商店:clarks鞋
2019/05/03 全球购物
波兰家居和花园家具专家:4Home
2019/05/26 全球购物
PHP如何对用户密码进行加密
2014/07/31 面试题
专业技术职务聘任书
2014/03/29 职场文书
2014年测量员工作总结
2014/12/12 职场文书
乡镇一岗双责责任书
2015/01/29 职场文书
Python打包exe时各种异常处理方案总结
2021/05/18 Python
MySql 8.0及对应驱动包匹配的注意点说明
2021/06/23 MySQL