浅谈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 相关文章推荐
HTML IMG标签 onload 内存溢出导致浏览器CPU占用过高
Mar 09 Javascript
javascript 动态table添加colspan\rowspan 参数的方法
Jul 25 Javascript
jquery命令汇总,方便使用jquery的朋友
Jun 26 Javascript
jquery插件开发注意事项小结
Jun 04 Javascript
jquery交替变换颜色的三种方法 实例代码
Nov 19 Javascript
jquery实现弹出div,始终显示在屏幕正中间的简单实例
Mar 08 Javascript
jQuery 计算iframe 窗口大小的方法
May 13 Javascript
window.location的重写及判断location是否被重写
Sep 04 Javascript
js实现带关闭按钮始终显示在网页最底部工具条的方法
Mar 02 Javascript
JQuery radio(单选按钮)操作方法汇总
Apr 15 Javascript
AngularJS中的JSONP实例解析
Dec 01 Javascript
详解jQuery中关于Ajax的几个常用的函数
Jul 17 jQuery
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
2020年4月放送决定!第2期TV动画《邪神酱飞踢》视觉图&主题曲情报公开!
2020/03/06 日漫
全国FM电台频率大全 - 28 甘肃省
2020/03/11 无线电
php 将bmp图片转为jpg等其他任意格式的图片
2009/06/21 PHP
免费的ip数据库淘宝IP地址库简介和PHP调用实例
2014/04/08 PHP
php实现登录tplink WR882N获取IP和重启的方法
2016/07/20 PHP
php实现批量修改文件名称的方法
2016/07/23 PHP
php中array_slice和array_splice函数解析
2016/10/18 PHP
jQuery中对节点进行操作的相关介绍
2013/04/16 Javascript
了不起的node.js读书笔记之例程分析
2014/12/22 Javascript
js中this用法实例详解
2015/05/05 Javascript
JavaScript面对国际化编程时的一些建议
2015/06/24 Javascript
基于javascript实现动态时钟效果
2020/08/18 Javascript
模仿password输入框的实现代码
2016/06/07 Javascript
vuejs2.0运用原生js实现简单的拖拽元素功能示例
2017/02/24 Javascript
JavaScript 巧学巧用
2017/05/23 Javascript
JavaScript Drum Kit 指南(纯 JS 模拟敲鼓效果)
2017/07/23 Javascript
使用p5.js临摹动态图形
2019/10/23 Javascript
实例讲解Python中的私有属性
2014/08/21 Python
Python3匿名函数lambda介绍与使用示例
2019/05/18 Python
python config文件的读写操作示例
2019/09/27 Python
浅析Python+OpenCV使用摄像头追踪人脸面部血液变化实现脉搏评估
2019/10/17 Python
python代码如何注释
2020/06/01 Python
pytorch使用horovod多gpu训练的实现
2020/09/09 Python
python Autopep8实现按PEP8风格自动排版Python代码
2021/03/02 Python
CSS3中的元素过渡属性transition示例详解
2016/11/30 HTML / CSS
HealthElement海外旗舰店:新西兰大卖场
2018/02/23 全球购物
Keds加拿大官网:购买帆布运动鞋和皮鞋
2019/09/26 全球购物
MySQL面试题
2014/01/12 面试题
中药专业大学生医药工作求职信
2013/10/25 职场文书
出差报告怎么写
2014/11/06 职场文书
机关单位工作失职检讨书
2014/11/20 职场文书
幼儿园父亲节活动总结
2015/02/12 职场文书
赤壁观后感(2)
2015/06/15 职场文书
2016年公共机构节能宣传周活动总结
2016/04/05 职场文书
python not运算符的实例用法
2021/06/30 Python
navicat 连接Ubuntu虚拟机的mysql的操作方法
2022/04/02 MySQL