浅谈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 相关文章推荐
javascript TextArea动态显示剩余字符
Oct 22 Javascript
JavaScript 原型学习总结
Oct 29 Javascript
javascript计算当月剩余天数(天数计算器)示例代码
Jan 09 Javascript
js图片处理示例代码
May 12 Javascript
从0开始学Vue
Oct 27 Javascript
javascript数据结构中栈的应用之符号平衡问题
Apr 11 Javascript
Javascript 一些需要注意的细节(必看篇)
Jul 08 Javascript
React入门教程之Hello World以及环境搭建详解
Jul 11 Javascript
cdn模式下vue的基本用法详解
Oct 07 Javascript
推荐15个最好用的JavaScript代码压缩工具
Feb 13 Javascript
webpack打包优化的几个方法总结
Feb 10 Javascript
vue 中的 render 函数作用详解
Feb 28 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
php笔记之:初探PHPcms模块开发介绍
2013/04/26 PHP
PHP实现获取FLV文件的时间
2015/02/10 PHP
PHP 在数组中搜索给定的简单实例 array_search 函数
2016/06/13 PHP
PHP 构造函数和析构函数原理与用法分析
2020/04/21 PHP
javascript实现图片切换的幻灯片效果源代码
2012/12/12 Javascript
不同Jquery版本引发的问题解决
2013/10/14 Javascript
JS画线(实例代码)
2013/11/20 Javascript
Javascript判断图片尺寸大小实例分析
2014/06/16 Javascript
jQuery多个input求和的实现方法
2015/02/12 Javascript
js图片模糊切换显示特效的方法
2015/02/17 Javascript
JS定义网页表单提交(submit)的方法
2015/03/20 Javascript
AngularJS实现元素显示和隐藏的几个案例
2015/12/09 Javascript
js添加绑定事件的方法
2016/05/15 Javascript
JS Canvas定时器模拟动态加载动画
2016/09/17 Javascript
js通过指定下标或指定元素进行删除数组的实例
2017/01/12 Javascript
setTimeout学习小结
2017/02/08 Javascript
js前端导出Excel的方法
2017/11/01 Javascript
JS获取浏览器地址栏的多个参数值的任意值实例代码
2018/07/24 Javascript
浏览器事件循环与vue nextTicket的实现
2019/04/16 Javascript
JAVA面试题 static关键字详解
2019/07/16 Javascript
在vue中利用全局路由钩子给url统一添加公共参数的例子
2019/11/01 Javascript
element-ui table行点击获取行索引(index)并利用索引更换行顺序
2020/02/27 Javascript
小程序Scroll-view上拉滚动刷新数据
2020/06/21 Javascript
Vue按时间段查询数据组件使用详解
2020/08/21 Javascript
Vue中引入svg图标的两种方式
2021/01/14 Vue.js
使用Python判断IP地址合法性的方法实例
2014/03/13 Python
在Python的Flask框架中使用日期和时间的教程
2015/04/21 Python
VSCode Python开发环境配置的详细步骤
2019/02/22 Python
python实现的读取网页并分词功能示例
2019/10/29 Python
英国绿色商店:Natural Collection
2019/05/03 全球购物
内勤主管岗位职责
2014/04/03 职场文书
2014年安全管理工作总结
2014/12/01 职场文书
南极大冒险观后感
2015/06/05 职场文书
步步惊心观后感
2015/06/12 职场文书
关于k8s环境部署mysql主从的问题
2022/03/13 MySQL