浅谈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 相关文章推荐
js图片延迟加载的实现方法及思路
Jul 22 Javascript
form.submit()不能提交表单的原因分析
Oct 23 Javascript
JavaScript插件化开发教程(五)
Feb 01 Javascript
jQuery实现在最后一个元素之前插入新元素的方法
Jul 18 Javascript
JS控制层作圆周运动的方法
Jun 20 Javascript
vue2.0父子组件间通信的实现方法
Apr 19 Javascript
vue复合组件实现注册表单功能
Nov 06 Javascript
vue双向数据绑定知识点总结
Apr 18 Javascript
JS前端知识点总结之页面加载事件,数组操作,DOM节点操作,循环和分支
Jul 04 Javascript
纯JS实现五子棋游戏
May 28 Javascript
微信小程序实现加入购物车滑动轨迹
Nov 18 Javascript
微信小程序实现通讯录列表展开收起
Nov 18 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 问卷调查结果统计
2015/10/08 PHP
Laravel学习教程之IOC容器的介绍与用例
2017/08/15 PHP
LNMP部署laravel以及xhprof安装使用教程
2017/09/14 PHP
php闭包中使用use声明变量的作用域实例分析
2018/08/09 PHP
thinkphp框架使用JWTtoken的方法详解
2019/10/10 PHP
页面中body onload 和 window.onload 冲突的问题的解决
2009/07/01 Javascript
JQuery判断子iframe何时加载完成解决方案
2013/08/20 Javascript
js获取当前页面路径示例讲解
2014/01/08 Javascript
登陆成功后自动计算秒数执行跳转
2014/01/23 Javascript
纯js实现瀑布流布局及ajax动态新增数据
2016/04/07 Javascript
分享两段简单的JS代码防止SQL注入
2016/04/12 Javascript
JS实现左右无缝轮播图代码
2016/05/01 Javascript
JS简单设置下拉选择框默认值的方法
2016/08/20 Javascript
Spring Boot+AngularJS+BootStrap实现进度条示例代码
2017/03/02 Javascript
详谈jQuery.load()和Jsp的include的区别
2017/04/12 jQuery
JS实现的base64加密解密操作示例
2018/04/18 Javascript
vue 实现通过手机发送短信验证码注册功能
2018/04/19 Javascript
解决vue的过渡动画无法正常实现问题
2019/10/31 Javascript
vue瀑布流组件实现上拉加载更多
2020/03/10 Javascript
JS绘图Flot如何实现动态可刷新曲线图
2020/10/16 Javascript
python实现从一组颜色中找出与给定颜色最接近颜色的方法
2015/03/19 Python
Python使用scrapy采集数据过程中放回下载过大页面的方法
2015/04/08 Python
Python实现基于多线程、多用户的FTP服务器与客户端功能完整实例
2017/08/18 Python
Python异常处理操作实例详解
2018/08/28 Python
python同步windows和linux文件
2019/08/29 Python
python OpenCV GrabCut使用实例解析
2019/11/11 Python
利用python实现AR教程
2019/11/20 Python
对Pytorch中Tensor的各种池化操作解析
2020/01/03 Python
设置jupyter中DataFrame的显示限制方式
2020/04/12 Python
Python+redis通过限流保护高并发系统
2020/04/15 Python
Python计算矩阵的和积的实例详解
2020/09/10 Python
java关于string最常出现的面试题整理
2021/01/18 Python
超越自我演讲稿
2014/05/21 职场文书
2014预备党员批评与自我批评思想汇报
2014/09/20 职场文书
学习保证书怎么写
2015/02/26 职场文书
Mysql事务索引知识汇总
2022/03/17 MySQL