浅谈addEventListener和attachEvent的区别


Posted in Javascript onJuly 14, 2016

• addEventListener共有3个参数,如下所示:

element.addEventListener(type,listener,useCapture);

参数 参数说明
element 要绑定事件的对象,及HTML节点。
type 事件名称,注意去掉事件前边的“on”,比如“onclick”要写成“click”,“onmouseover”要写成“mouseover”。
listener 要绑定的事件监听函数,注意只写函数名,不要带括号。
userCapture 事件监听方式,只能是true和false:true,采用capture(捕获)模式;false,采用bubbling(冒泡)模式。如无特殊要求,一般是false。

这里有必要说一下捕获模式和冒泡模式的区别。

浅谈addEventListener和attachEvent的区别

如图所示,有两层div元素,而且都设定有click事件,一般来说,如果我在内层蓝色的元素上click不只会触发蓝色元素的click事件,还会同时触发红色元素的click事件,而useCapture这个参数就是在控制这时候两个click事件的先后顺序。如果是false,那就会使用bubbling(冒泡)模式,他是从内而外的流程,所以会先执行蓝色元素的click事件再执行红色元素的click事件,如果是true,那就是capture(捕获)模式,和bubbling(冒泡)模式相反是由外而内,会先执行红色元素的click事件才执行蓝色元素的click事件。

如果不同层的元素使用的useCapture不同,会先从最外层元素往目标元素寻找设定为capture(捕获)模式的事件,到达目标元素执行目标元素的事件后,再寻原路往外寻找设定为bubbling(冒泡)模式的事件。

•attachEvent共有2个参数,如下所示:

element.attachEvent(type,listener);

参数 参数说明
element 要绑定事件的对象,及HTML节点。
type 事件名称,注意加上事件前边的“on”,比如“onclick”和“onmouseover”,这是与addEventListener的区别。
listener 要绑定的事件监听函数,注意只写函数名,不要带括号。

addEventListener()是标准的绑定事件监听函数的方法,是W3C所支持的,Chrome、FireFox、Opera、Safari、IE9.0及其以上版本都支持该函数;但是,IE8.0及其以下版本不支持该方法,它使用attachEvent()来绑定事件监听函数。所以,这种绑定事件的方法必须要处理浏览器兼容问题。

兼容IE和非IE浏览器事件绑定的代码:

function addEvent(obj,type,handle){
  try{ // Chrome、FireFox、Opera、Safari、IE9.0及其以上版本
    obj.addEventListener(type,handle,false);
  }catch(e){
    try{ // IE8.0及其以下版本
      obj.attachEvent('on' + type,handle);
    }catch(e){ // 早期浏览器
      obj['on' + type] = handle;
    }
  }
}

或者

function regEvent(ele, event_name, fun)
{
  if (window.attachEvent) 
    ele.attachEvent(event_name, fun); //IE浏览器
  else
  {
    event_name = event_name.replace(/^on/, “”);  //如果on开头,删除on,如onclick->click
    ele.addEventListener(event_name, fun, false); //非IE浏览器
  }
}

以上这篇浅谈addEventListener和attachEvent的区别就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持三水点靠木。

Javascript 相关文章推荐
通过js简单实现将一个文本内容转译成加密文本
Oct 22 Javascript
jQuery控制iFrame(实例代码)
Nov 19 Javascript
jQuery中size()方法用法实例
Dec 27 Javascript
JavaScript检测上传文件大小的方法
Jul 22 Javascript
jQuery 跨域访问解决原理案例详解
Jul 09 Javascript
详解JavaScript模块化开发
Dec 04 Javascript
javascript 取小数点后几位几种方法总结
Aug 02 Javascript
详解AngularJS跨页面传值(ui-router)
Aug 23 Javascript
mpvue开发音频类小程序踩坑和建议详解
Mar 12 Javascript
layui弹出框Tab选项卡的示例代码
Sep 04 Javascript
压缩Vue.js打包后的体积方法总结(Vue.js打包后体积过大问题)
Feb 03 Javascript
小程序跳转到的H5页面再跳转回跳小程序的方法
Mar 06 Javascript
ui组件之input多选下拉实现方法(带有搜索功能)
Jul 14 #Javascript
全面了解addEventListener和on的区别
Jul 14 #Javascript
js计算系统当前日期是星期几的方法
Jul 14 #Javascript
原生javascript 学习之js变量全面了解
Jul 14 #Javascript
javascript超过容器后显示省略号效果的方法(兼容一行或者多行)
Jul 14 #Javascript
AngularJS实用开发技巧(推荐)
Jul 13 #Javascript
JS中如何比较两个Json对象是否相等实例代码
Jul 13 #Javascript
You might like
CURL状态码列表(详细)
2013/06/27 PHP
php基于数组函数实现关联表的编辑操作示例
2017/07/04 PHP
jquery 操作DOM案例代码分享
2012/04/05 Javascript
JavaScript高级程序设计(第3版)学习笔记2 js基础语法
2012/10/11 Javascript
js 实现 input type="file" 文件上传示例代码
2013/08/07 Javascript
一个不错的仿携程自定义数据下拉选择select
2014/09/01 Javascript
jQuery源码分析之Callbacks详解
2015/03/13 Javascript
基于jQuery滑动杆实现购买日期选择效果
2015/09/15 Javascript
详解Vue.js 2.0 如何使用axios
2017/04/21 Javascript
vue-router单页面路由
2017/06/17 Javascript
jquery中done和then的区别(详解)
2017/12/19 jQuery
浅谈layui里的上传控件问题
2019/09/26 Javascript
Vue使用CDN引用项目组件,减少项目体积的步骤
2020/10/30 Javascript
vue created钩子函数与mounted钩子函数的用法区别
2020/11/05 Javascript
[01:06]DOTA2亚洲邀请赛专属珍藏-荧煌之礼
2017/03/24 DOTA
[04:54]DOTA2 2017国际邀请赛:上届冠军WINGS采访短片
2017/08/09 DOTA
[05:46]2018完美盛典-《同梦共竞》
2018/12/17 DOTA
[35:55]完美世界DOTA2联赛PWL S3 Rebirth vs CPG 第一场 12.11
2020/12/13 DOTA
python实现爬取千万淘宝商品的方法
2015/06/30 Python
Python中如何优雅的合并两个字典(dict)方法示例
2017/08/09 Python
基于随机梯度下降的矩阵分解推荐算法(python)
2018/08/31 Python
实例讲解python中的序列化知识点
2018/10/08 Python
python判断单向链表是否包括环,若包含则计算环入口的节点实例分析
2019/10/23 Python
Python内置方法实现字符串的秘钥加解密(推荐)
2019/12/09 Python
python文件操作seek()偏移量,读取指正到指定位置操作
2020/07/05 Python
如何用 Python 制作一个迷宫游戏
2021/02/25 Python
意大利香水和彩妆护肤品购物网站:Ditano
2017/08/13 全球购物
意大利值得信赖的在线超级药房:PillolaStore
2020/02/05 全球购物
英国家具、照明、家居用品网上商店:Wayfair.co.uk
2020/02/13 全球购物
P D PAOLA法国官网:西班牙著名的珠宝首饰品牌
2020/02/15 全球购物
架构师岗位职责
2013/11/18 职场文书
2014年清明节网上祭英烈寄语
2014/04/09 职场文书
最新优秀教师个人先进事迹材料
2014/05/06 职场文书
医院深入开展党的群众路线教育实践活动实施方案
2014/08/27 职场文书
css3 filter属性的使用简介
2021/03/31 HTML / CSS
MySQL慢查询中的commit慢和binlog中慢事务的区别
2022/06/16 MySQL