原生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 相关文章推荐
替代window.event.srcElement效果的可兼容性的函数
Dec 18 Javascript
非阻塞动态加载javascript广告实现代码
Nov 17 Javascript
jquery 笔记 事件
Nov 02 Javascript
在iframe里的页面编写js,实现在父窗口上创建动画效果展开和收缩的div(不变动iframe父窗口代码)
Dec 20 Javascript
JavaScript闭包实例讲解
Apr 22 Javascript
jquery使用ajax实现微信自动回复插件
Apr 28 Javascript
JavaScript获取图片的原始尺寸以宽度为例
May 04 Javascript
iframe子页面与父页面在同域或不同域下的js通信
May 07 Javascript
JavaScript采用递归算法计算阶乘实例
Aug 04 Javascript
JavaScript实现带箭头标识的多级下拉菜单效果
Aug 27 Javascript
使用vux实现上拉刷新功能遇到的坑
Feb 08 Javascript
微信小程序实现录音时的麦克风动画效果实例
May 18 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删除txt文件指定行及按行读取txt文档数据的方法
2017/01/30 PHP
如何离线执行php任务
2017/02/21 PHP
PHP中散列密码的安全性分析
2019/07/26 PHP
js实现权限树的更新权限时的全选全消功能
2009/02/17 Javascript
不要在cookie中使用特殊字符的原因分析
2010/07/13 Javascript
js单词形式的运算符
2014/05/06 Javascript
js常用数组操作方法简明总结
2014/06/20 Javascript
javascript实现点击提交按钮后显示loading的方法
2015/07/03 Javascript
jQuery添加和删除指定标签的方法
2015/12/16 Javascript
深入剖析JavaScript:Object类型
2016/05/10 Javascript
浅析$.getJSON异步请求和同步请求
2016/06/06 Javascript
javascript的函数劫持浅析
2016/09/26 Javascript
js验证手机号、密码、短信验证码代码工具类
2020/06/24 Javascript
基于jquery实现多选下拉列表
2017/08/02 jQuery
Angular实现的进度条功能示例
2018/02/18 Javascript
vue注册组件的几种方式总结
2018/03/08 Javascript
JS实现可视化文件上传
2018/09/08 Javascript
Vue的H5页面唤起支付宝支付功能
2019/04/18 Javascript
JavaScript算法学习之冒泡排序和选择排序
2019/11/02 Javascript
Pandas之drop_duplicates:去除重复项方法
2018/04/18 Python
关于pycharm中pip版本10.0无法使用的解决办法
2019/10/10 Python
Python使用configparser库读取配置文件
2020/02/22 Python
Python实现代码块儿折叠
2020/04/15 Python
美国第二大团购网站:LivingSocial
2016/07/24 全球购物
正宗的澳大利亚Ugg靴子零售商:UGG Express
2020/04/19 全球购物
在Ajax应用中信息是如何在浏览器和服务器之间传递的
2016/05/31 面试题
幼儿运动会邀请函
2014/01/17 职场文书
公务员政审个人鉴定
2014/02/25 职场文书
迎新春趣味活动方案
2014/08/24 职场文书
暑假安全保证书
2015/02/28 职场文书
入党积极分子个人总结
2015/03/02 职场文书
中标通知书范本
2015/04/17 职场文书
外科护士长工作总结
2015/08/12 职场文书
文艺委员竞选稿
2015/11/19 职场文书
二手手机买卖合同范本(2019年版)
2019/10/28 职场文书
Python制作表白爱心合集
2022/01/22 Python