浅谈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在myeclipse中报错的解决方法
Oct 29 Javascript
javascript函数式编程实例分析
Apr 25 Javascript
jQuery原理系列-常用Dom操作详解
Jun 07 Javascript
纯JS单页面赛车游戏制作代码分享
Mar 03 Javascript
AngularJs ng-change事件/指令的用法小结
Nov 01 Javascript
vue router-link传参以及参数的使用实例
Nov 10 Javascript
详解vue项目的构建,打包,发布全过程
Nov 23 Javascript
JS使用队列对数组排列,基数排序算法示例
Mar 02 Javascript
angular4+百分比进度显示插件用法示例
May 05 Javascript
JQuery实现ul中添加LI和删除指定的Li元素功能完整示例
Oct 16 jQuery
0基础学习前端开发的一些建议
Jul 14 Javascript
three.js显示中文字体与tween应用详析
Jan 04 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学习笔记之数组篇
2011/06/28 PHP
JS对象转换为Jquery对象示例
2014/01/26 Javascript
php析构函数的具体用法小结
2014/03/11 Javascript
javascript解析json实例详解
2014/11/05 Javascript
使用DNode实现php和nodejs之间通信的简单实例
2015/07/06 NodeJs
BootStrap.css 在手机端滑动时右侧出现空白的原因及解决办法
2016/06/07 Javascript
javascript 将共享属性迁移到原型中去的实现方法
2016/08/31 Javascript
JavaScript鼠标特效大全
2016/09/13 Javascript
用js实现简单算法的实例代码
2016/09/24 Javascript
Angular2从搭建环境到开发步骤详解
2016/10/17 Javascript
jQuery实现两列等高并自适应高度
2016/12/22 Javascript
使用jQuery的ajax方法向服务器发出get和post请求的方法
2017/01/13 Javascript
如何在Vue.js中实现标签页组件详解
2019/01/02 Javascript
详解JSON和JSONP劫持以及解决方法
2019/03/08 Javascript
JS+CSS实现3D切割轮播图
2020/03/21 Javascript
2款Python内存检测工具介绍和使用方法
2014/06/01 Python
import的本质解析
2017/10/30 Python
python之pandas用法大全
2018/03/13 Python
python中的插值 scipy-interp的实现代码
2018/07/23 Python
Python实现的各种常见分布算法示例
2018/12/13 Python
python 获取utc时间转化为本地时间的方法
2018/12/31 Python
利用python和百度地图API实现数据地图标注的方法
2019/05/13 Python
详解Numpy中的数组拼接、合并操作(concatenate, append, stack, hstack, vstack, r_, c_等)
2019/05/27 Python
python+pygame实现坦克大战小游戏的示例代码(可以自定义子弹速度)
2020/08/11 Python
matplotlib 使用 plt.savefig() 输出图片去除旁边的空白区域
2021/01/05 Python
纯CSS3制作漂亮带动画效果的主机价格表
2015/04/25 HTML / CSS
SISLEY希思黎官方旗舰店:享誉全球的奢华植物美容品牌
2018/04/25 全球购物
俄罗斯品牌服装和鞋子的在线商店:KUPIVIP
2019/10/27 全球购物
开展创先争优活动总结
2014/08/28 职场文书
毕业论文致谢信
2015/05/14 职场文书
导盲犬小Q观后感
2015/06/11 职场文书
2015年公路路政个人工作总结
2015/07/24 职场文书
赞美教师的句子
2019/09/02 职场文书
JavaScript 实现页面滚动动画
2021/04/24 Javascript
HTML+VUE分页实现炫酷物联网大屏功能
2021/05/27 Vue.js
css布局巧妙技巧之css三角示例的运用
2022/03/16 HTML / CSS