浅谈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 相关文章推荐
找到了一篇jQuery与Prototype并存的冲突的解决方法
Aug 29 Javascript
完整显示当前日期和时间的JS代码
Sep 17 Javascript
在jQuery中 关于json空对象筛选替换
Apr 15 Javascript
利用js动态添加删除table行的示例代码
Dec 16 Javascript
JavaScript仿flash遮罩动画效果
Jun 15 Javascript
浅谈html转义及防止javascript注入攻击的方法
Dec 04 Javascript
JavaScript函数节流的两种写法
Apr 07 Javascript
Vue.js 通过jQuery ajax获取数据实现更新后重新渲染页面的方法
Aug 09 jQuery
layui实现数据表格自定义数据项
Oct 26 Javascript
微信小程序实现同时上传多张图片
Feb 03 Javascript
vuex实现购物车的增加减少移除
Jun 28 Javascript
vue实现验证用户名是否可用
Jan 20 Vue.js
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下几种删除目录的方法总结
2007/08/19 PHP
PHPExcel读取EXCEL中的图片并保存到本地的方法
2015/02/14 PHP
PHP正则表达式过滤html标签属性(DEMO)
2016/05/04 PHP
php下载文件超时时间的设置方法
2016/10/06 PHP
PHP上传图片时判断上传文件是否为可用图片的方法
2016/10/20 PHP
php制作圆形用户头像的实例_自定义封装类源代码
2017/09/18 PHP
Laravel学习教程之request validation的编写
2017/10/25 PHP
PHP实现网站访问量计数器
2017/10/27 PHP
laravel框架学习笔记之组件化开发实现方法
2020/02/01 PHP
可以把编码转换成 gb2312编码lib.UTF8toGB2312.js
2007/08/21 Javascript
jQuery创建插件的代码分析
2011/04/14 Javascript
Node.js实现Excel转JSON
2015/04/24 Javascript
获取select的value、text值的简单示例(jquery与javascript)
2016/12/07 Javascript
干货!教大家如何选择Vue和React
2017/03/13 Javascript
从源码里了解vue中的nextTick的使用
2018/11/22 Javascript
Vue项目中使用better-scroll实现一个轮播图自动播放功能
2018/12/03 Javascript
vue实现日历备忘录功能
2020/09/24 Javascript
npm 语义版本控制详解
2019/09/10 Javascript
nodejs语言实现验证码生成功能的示例代码
2019/10/13 NodeJs
vue实现路由不变的情况下,刷新页面操作示例
2020/02/02 Javascript
JavaScript onclick事件使用方法详解
2020/05/15 Javascript
vue treeselect获取当前选中项的label实例
2020/08/31 Javascript
跟老齐学Python之私有函数和专有方法
2014/10/24 Python
python读写二进制文件的方法
2015/05/09 Python
Ubuntu下使用python读取doc和docx文档的内容方法
2018/05/08 Python
Django数据库操作之save与update的使用
2020/04/01 Python
浅谈Html5移动端ios/Android兼容性总结
2018/06/01 HTML / CSS
路易威登和香奈儿手袋:LuxeDH
2017/01/12 全球购物
英国品牌男装折扣网站:Brown Bag
2018/03/08 全球购物
澳大利亚排名第一的狂热牛仔品牌:ONETEASPOON
2018/11/20 全球购物
网络教育毕业生自我鉴定
2013/10/10 职场文书
志愿者活动总结
2014/04/28 职场文书
2016自主招生教师推荐信范文
2015/03/23 职场文书
css position fixed 左右双定位的实现代码
2021/04/29 HTML / CSS
Pytorch 如何加速Dataloader提升数据读取速度
2021/05/28 Python
引用计数法和root搜索算法以及JVM中判定对象需要回收的方法
2022/04/19 Java/Android