浅谈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 相关文章推荐
将字符串转换成gb2312或者utf-8编码的参数(js版)
Apr 10 Javascript
JavaScript自定义事件介绍
Aug 29 Javascript
httpclient模拟登陆具体实现(使用js设置cookie)
Dec 11 Javascript
简介JavaScript中Math.LOG10E属性的使用
Jun 14 Javascript
jQuery实现带延迟的二级tab切换下拉列表效果
Sep 01 Javascript
深入浅析Bootstrap列表组组件
May 03 Javascript
JavaScript获取中英文混合字符串长度的方法示例
Feb 04 Javascript
vue.js中mint-ui框架的使用方法
May 12 Javascript
JS点击图片弹出文件选择框并覆盖原图功能的实现代码
Aug 25 Javascript
微信小程序项目实践之主页tab选项实现
Jul 18 Javascript
ES6基础之 Promise 对象用法实例详解
Aug 22 Javascript
js实现QQ邮箱邮件拖拽删除功能
Aug 27 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
IIS+fastcgi下PHP运行超时问题的解决办法详解
2013/06/20 PHP
PHP7新增函数
2021/03/09 PHP
飞鱼(shqlsl) javascript作品集
2006/12/16 Javascript
Javascript调用C#代码
2011/01/17 Javascript
javascript object array方法使用详解
2012/12/03 Javascript
js 3种归并操作的实例代码
2013/10/30 Javascript
jQuery中多个元素的Hover事件解决方案
2014/06/12 Javascript
jQuery实现textarea自动增长宽高的方法
2015/12/18 Javascript
js实现内容显示并使用json传输数据
2016/03/16 Javascript
不间断循环滚动效果的实例代码(必看篇)
2016/10/08 Javascript
使用DeviceOne实现微信小程序功能
2016/12/29 Javascript
Vue 2中ref属性的使用方法及注意事项
2017/06/12 Javascript
浅谈Node 调试工具入门教程
2018/03/20 Javascript
基于vue-router 多级路由redirect 重定向的问题
2018/09/03 Javascript
VUE-cli3使用 svg-sprite-loader
2018/10/20 Javascript
[01:10]DOTA2次级职业联赛 - EP战队宣传片
2014/12/01 DOTA
[01:22:19]EG vs TNC Supermajor小组赛B组败者组第一轮 BO3 第二场 6.2
2018/06/03 DOTA
Python列表计数及插入实例
2014/12/17 Python
Python实现竖排打印传单手机号码易撕条
2015/03/16 Python
Python实现生成随机数据插入mysql数据库的方法
2017/12/25 Python
python的staticmethod与classmethod实现实例代码
2018/02/11 Python
python实现雪花飘落效果实例讲解
2019/06/18 Python
python生成器推导式用法简单示例
2019/10/08 Python
Django中ORM找出内容不为空的数据实例
2020/05/20 Python
基于python实现删除指定文件类型
2020/07/21 Python
pycharm 配置svn的图文教程(手把手教你)
2021/01/15 Python
python向xls写入数据(包括合并,边框,对齐,列宽)
2021/02/02 Python
COS美国官网:知名服装品牌
2019/04/08 全球购物
XMLHttpRequest对象在IE和Firefox中创建方式有没有不同
2016/03/23 面试题
环境科学专业优秀毕业生自荐书
2014/02/03 职场文书
英文请假条
2014/04/11 职场文书
学雷锋志愿者活动总结
2014/06/27 职场文书
学校2014重阳节活动策划方案
2014/09/16 职场文书
团组织推优材料
2014/12/29 职场文书
承诺书范本
2015/01/21 职场文书
手把手教你导入Go语言第三方库
2021/08/04 Golang