原生js事件的添加和删除的封装

 更新时间:2014年07月01日 11:19:19   投稿:whsnow  
在IE浏览器中添加或删除事件用attachEvent、detachEvent,下面的对事件的添加和删除做了封装,感兴趣的朋友可以参考下

在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),而且也有同样的事件对应函数,我想,看图会比较清楚。

范例有两层的div方块

像这张图所显示的,我的范例有两层div元素,而且都设定有click事件,一般来说,如果我在内层蓝色的元素上click不只会触发蓝色元素的click事件,还会同时触发红色元素的click事件,而useCapture这个参数就是在控制这时候两个click事件的先后顺序。如果是false,那就会使用bubbling,他是从内而外的流程,所以会先执行蓝色元素的click事件再执行红色元素的click事件,如果是true,那就是capture,和bubbling相反是由外而内,会先执行红色元素的click事件才执行蓝色元素的click事件。附上两个范例,capture和bubbling,两个档案只有差在此一参数不同,可以发现事件的发生顺序不一样了。

那如果不同层的元素使用的useCapture不同呢?就是会先从最外层元素往目标元素寻找设定为capture的事件,到达目标元素执行目标元素的事件后,再寻原路往外寻找设定为bubbling的事件。

相关文章

  • JS实现随机点名器

    JS实现随机点名器

    这篇文章主要为大家详细介绍了JS实现随机点名器,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2020-04-04
  • JS实现星星评分功能实例代码(两种方法)

    JS实现星星评分功能实例代码(两种方法)

    这篇文章主要介绍了JS实现星星评分功能实例代码(两种方法)的相关资料,非常不错,具有参考借鉴价值,需要的朋友可以参考下
    2016-06-06
  • JS与jQuery遍历Table所有单元格内容的方法

    JS与jQuery遍历Table所有单元格内容的方法

    这篇文章主要介绍了JS与jQuery遍历Table所有单元格内容的方法,结合实例形式分别描述了JavaScript与jQuery实现遍历table单元格的实现技巧,具有一定参考借鉴价值,需要的朋友可以参考下
    2015-12-12
  • JavaScript制作windows经典扫雷小游戏

    JavaScript制作windows经典扫雷小游戏

    扫雷是一款相当大众的小游戏,游戏目标是在最短的时间内根据点击格子出现的数字找出所有非雷格子,同时避免踩雷。今天我们来看看如何使用javascript来实现这款小游戏
    2015-03-03
  • 微信小程序如何调用json数据接口并解析

    微信小程序如何调用json数据接口并解析

    这篇文章主要介绍了微信小程序如何调用json数据接口并解析,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
    2019-06-06
  • JS判断传入函数的参数是否为空(函数参数是否传递)

    JS判断传入函数的参数是否为空(函数参数是否传递)

    这篇文章主要介绍了JS判断传入函数的参数是否为空(函数参数是否传递),需要的朋友可以参考下
    2023-05-05
  • JS弹出窗口的运用与技巧大全

    JS弹出窗口的运用与技巧大全

    本篇文章主要介绍了JS弹出窗口的运用与技巧大全,详解介绍了几种利用网页弹出各种形式的窗口,具有一定的参考价值,感兴趣的小伙伴们可以参考一下。
    2016-11-11
  • JavaScript设计模式之单例模式原理与用法实例分析

    JavaScript设计模式之单例模式原理与用法实例分析

    这篇文章主要介绍了JavaScript设计模式之单例模式原理与用法,结合实例形式分析了单例模式的原理、命名空间的使用、闭包、惰性单例形式以及单例模式的基本应用,需要的朋友可以参考下
    2018-07-07
  • LayUI动态设置checkbox不显示的解决方法

    LayUI动态设置checkbox不显示的解决方法

    今天小编就为大家分享一篇LayUI动态设置checkbox不显示的解决方法,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2019-09-09
  • JavaScript中数组reduce()方法使用详情

    JavaScript中数组reduce()方法使用详情

    这篇文章主要介绍了JavaScript中数组reduce()方法使用详情,reduce()对数组中的每个元素进行累加,返回一个新的值,可以传入初始值,更多相关内容需要的小伙伴可以参考一下下面文章介绍
    2022-09-09

最新评论