浅谈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 相关文章推荐
prototype 学习笔记整理
Jul 17 Javascript
字符串的replace方法应用浅析
Dec 06 Javascript
原生javascript实现图片滚动、延时加载功能
Jan 12 Javascript
js文字横向滚动特效
Nov 11 Javascript
Jquery easyui开启行编辑模式增删改操作
Jan 14 Javascript
拥Bootstrap入怀——导航栏篇
May 30 Javascript
每日十条JavaScript经验技巧(一)
Jun 23 Javascript
js仿iphone秒表功能 计算平均数
Jan 11 Javascript
vue.js 左侧二级菜单显示与隐藏切换的实例代码
May 23 Javascript
JavaScript canvas实现围绕旋转动画
Nov 18 Javascript
Node.js API详解之 string_decoder用法实例分析
Apr 29 Javascript
vue+iview框架实现左侧动态菜单功能的示例代码
Jul 23 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
PHP脚本数据库功能详解(中)
2006/10/09 PHP
Base64在线编码解码实现代码 演示与下载
2011/01/08 PHP
PHP sprintf() 函数的应用(定义和用法)
2012/06/29 PHP
基于jQuery的日期选择控件
2009/10/27 Javascript
今天是星期几的4种JS代码写法
2013/09/17 Javascript
JavaScript中匿名、命名函数的性能测试
2014/09/04 Javascript
Bootstrap 附加导航(Affix)插件实例详解
2016/06/01 Javascript
Bootstrap弹出框(modal)垂直居中的问题及解决方案详解
2016/06/12 Javascript
浅谈$('div a') 与$('div>a')的区别
2016/07/18 Javascript
vue中渐进过渡效果实现
2016/10/27 Javascript
Ajax与服务器(JSON)通信实例代码
2016/11/05 Javascript
Angular4实现图片上传预览路径不安全的问题解决
2017/12/25 Javascript
Node解决简单重复问题系列之Excel内容的获取
2018/01/02 Javascript
利用chrome浏览器进行js调试并找出元素绑定的点击事件详解
2021/01/30 Javascript
微信小程序利用swiper+css实现购物车商品删除功能
2019/03/06 Javascript
pm2启动ssr失败的解决方法
2019/06/29 Javascript
vue 实现v-for循环回来的数据动态绑定id
2019/11/07 Javascript
[01:08:09]DOTA2上海特级锦标赛主赛事日 - 1 胜者组第一轮#1Liquid VS Alliance第二局
2016/03/02 DOTA
[00:27]DOTA2战队VP、Secret贺新春
2018/02/11 DOTA
使用Python读取大文件的方法
2018/02/11 Python
Python实现微信消息防撤回功能的实例代码
2019/04/29 Python
详解Python下载图片并保存本地的两种方式
2019/05/15 Python
详解Django配置优化方法
2019/11/18 Python
opencv3/python 鼠标响应操作详解
2019/12/11 Python
python+adb命令实现自动刷视频脚本案例
2020/04/23 Python
Vans(范斯)德国官网:美国南加州的原创极限运动潮牌
2017/05/02 全球购物
伦敦一家西班牙童装精品店:La Coqueta
2018/02/02 全球购物
机械制造与自动化应届生求职信
2013/11/16 职场文书
廉政教育心得体会
2014/01/01 职场文书
干部作风建设工作总结
2014/10/29 职场文书
会计求职信怎么写
2015/03/20 职场文书
2015年社区流动人口工作总结
2015/05/12 职场文书
“5.12”护士节主持词
2015/07/04 职场文书
教师信息技术学习心得体会
2016/01/21 职场文书
5行Python代码实现一键批量扣图
2021/06/29 Python
CSS布局之浮动(float)和定位(position)属性的区别
2021/09/25 HTML / CSS