浅谈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 相关文章推荐
抽出www.templatemonster.com的鼠标悬停加载大图模板的代码
Jul 11 Javascript
调试JavaScript中正则表达式中遇到的问题
Jan 27 Javascript
jquery任意位置浮动固定层插件用法实例
May 29 Javascript
javascript实现简单的进度条
Jul 02 Javascript
最新最热最实用的15个jQuery插件汇总
Jul 05 Javascript
jquery实现在网页指定区域显示自定义右键菜单效果
Aug 25 Javascript
javascript冒泡排序小结
Apr 10 Javascript
Bootstrap组件系列之福利篇几款好用的组件(推荐二)
Jul 12 Javascript
vue路由跳转时判断用户是否登录功能的实现
Oct 26 Javascript
使用vue-aplayer插件时出现的问题的解决
Mar 02 Javascript
详解如何解决vue开发请求数据跨域的问题(基于浏览器的配置解决)
Nov 12 Javascript
微信小程序实现折线图的示例代码
Jun 07 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读取IMAP邮件
2006/10/09 PHP
一个漂亮的php验证码类(分享)
2013/08/06 PHP
PHP魔术方法的使用示例
2015/06/23 PHP
php 替换文章中的图片路径,下载图片到本地服务器的方法
2018/02/06 PHP
清华大学出版的事半功倍系列 javascript全部源代码
2007/05/04 Javascript
不错的JS中变量相关的细节分析
2007/08/13 Javascript
setTimeout和setInterval的区别你真的了解吗?
2011/03/31 Javascript
初步认识JavaScript函数库jQuery
2015/06/18 Javascript
JS实现双击屏幕滚动效果代码
2015/10/28 Javascript
解决JavaScript数字精度丢失问题的方法
2015/12/03 Javascript
jQuery命名空间与闭包用法示例
2017/01/12 Javascript
完美的js图片轮换效果
2017/02/05 Javascript
jQuery简单实现MD5加密的方法
2017/03/03 Javascript
Angular+Node生成随机数的方法
2017/06/16 Javascript
JavaScript字符串检索字符的方法
2017/06/23 Javascript
原生JS封装_new函数实现new关键字的功能
2018/08/12 Javascript
layui table 表格上添加日期控件的两种方法
2019/09/28 Javascript
Vue中jsx不完全应用指南小结
2019/11/01 Javascript
基于jsbarcode 生成条形码并将生成的条码保存至本地+源码
2020/04/27 Javascript
浅谈vue中document.getElementById()拿到的是原值的问题
2020/07/26 Javascript
解决Antd Table组件表头不对齐的问题
2020/10/27 Javascript
python3 http提交json参数并获取返回值的方法
2018/12/19 Python
关于Numpy数据类型对象(dtype)使用详解
2019/11/27 Python
pytorch 中的重要模块化接口nn.Module的使用
2020/04/02 Python
澳大利亚香水在线:Price Rite Mart
2017/12/28 全球购物
viagogo意大利票务平台:演唱会、体育比赛、戏剧门票
2018/01/26 全球购物
澳大利亚办公室装修:JasonL Office Furniture
2019/06/25 全球购物
澳大利亚领先的在线药房:Pharmacy Online(有中文站)
2020/02/22 全球购物
澳大利亚一站式数码相机商店:CameraPro
2020/03/09 全球购物
护士岗位求职应聘自荐书范文
2014/02/12 职场文书
餐厅楼面主管岗位职责范本
2014/02/16 职场文书
2014年工程工作总结
2014/11/25 职场文书
停课通知书
2015/04/24 职场文书
python某漫画app逆向
2021/03/31 Python
python中sys模块的介绍与实例
2021/04/17 Python
uniapp 微信小程序 自定义tabBar 导航
2022/04/22 Javascript