浅谈JavaScript事件绑定的常用方法及其优缺点分析


Posted in Javascript onNovember 01, 2016

传统方式 

element.onclick = function(e){

     // ...

   };

 1.  传统绑定的优点

非常简单和稳定,可以确保它在你使用的不同浏览器中运作一致

处理事件时,this关键字引用的是当前元素,这很有帮组

2. 传统绑定的缺点

传统方法只会在事件冒泡中运行,而非捕获和冒泡

一个元素一次只能绑定一个事件处理函数。新绑定的事件处理函数会覆盖旧的事件处理函数

事件对象参数(e)仅非IE浏览器可用

W3C方式 

element.addEventListener('click', function(e){

    // ...

  }, false);

1. W3C绑定的优点

该方法同时支持事件处理的捕获和冒泡阶段。事件阶段取决于addEventListener最后的参数设置:false (冒泡) 或 true (捕获)。

在事件处理函数内部,this关键字引用当前元素。

事件对象总是可以通过处理函数的第一个参数(e)捕获。

可以为同一个元素绑定你所希望的多个事件,同时并不会覆盖先前绑定的事件

2. W3C绑定的缺点

IE不支持,你必须使用IE的attachEvent函数替代。

IE方式

element.attachEvent('onclick', function(){

    // ...

  });

1. IE方式的优点

可以为同一个元素绑定你所希望的多个事件,同时并不会覆盖先前绑定的事件。

2. IE方式的缺点

IE仅支持事件捕获的冒泡阶段

事件监听函数内的this关键字指向了window对象,而不是当前元素(IE的一个巨大缺点)

事件对象仅存在与window.event参数中

事件必须以ontype的形式命名,比如,onclick而非click

仅IE可用。你必须在非IE浏览器中使用W3C的addEventListener

Dean Edwards的方案(addEvent/removeEvent库)   

1. addEvent的优点

可以在所有浏览器中工作,就算是更古老无任何支持的浏览器

this关键字可以在所有的绑定函数中使用,指向的是当前元素

中和了所有防止浏览器默认行为和阻止事件冒泡的各种浏览器特定函数

不管浏览器类型,事件对象总是作为第一个对象传入

2. addEvent的缺点

仅工作在冒泡阶段(因为它深入使用事件绑定的传统方式)

以上就是小编为大家带来的浅谈JavaScript事件绑定的常用方法及其优缺点分析全部内容了,希望大家多多支持三水点靠木~

Javascript 相关文章推荐
javascript demo 基本技巧
Dec 18 Javascript
JS request函数 用来获取url参数
May 17 Javascript
js播放wav文件(源码)
Apr 22 Javascript
js网页实时倒计时精确到秒级
Feb 10 Javascript
深入讲解AngularJS中的自定义指令的使用
Jun 18 Javascript
基于javascript编写简单日历
May 02 Javascript
jquery输入数字随机抽奖特效的简单实现代码
Jun 10 Javascript
js实现短信发送倒计时功能(正则验证)
Feb 10 Javascript
基于Angularjs+mybatis实现二级评论系统(仿简书)
Feb 13 Javascript
解决vue中修改了数据但视图无法更新的情况
Aug 27 Javascript
ES6小技巧之代替lodash
Jun 07 Javascript
JavaScript 变量,数据类型基础实例详解【变量、字符串、数组、对象等】
Jan 04 Javascript
微信小程序 wxapp内容组件 progress详细介绍
Oct 31 #Javascript
微信小程序 wxapp内容组件 text详细介绍
Oct 31 #Javascript
微信小程序 wxapp内容组件 icon详细介绍
Oct 31 #Javascript
微信小程序 wxapp导航 navigator详解
Oct 31 #Javascript
微信小程序 wxapp地图 map详解
Oct 31 #Javascript
微信小程序 wxapp画布 canvas详细介绍
Oct 31 #Javascript
微信小程序 wxapp视图容器 view详解
Oct 31 #Javascript
You might like
农民和部队如何穿矿
2020/03/04 星际争霸
php防注
2007/01/15 PHP
destoon找回管理员密码的方法
2014/06/21 PHP
菜鸟javascript基础整理1
2010/12/06 Javascript
细说javascript函数从函数的构成开始
2013/08/29 Javascript
jQuery 三击事件实现代码
2013/09/11 Javascript
动态加载JS文件的三种方法
2013/11/08 Javascript
JQuery实现当鼠标停留在某区域3秒后自动执行
2014/09/09 Javascript
阻止表单提交按钮多次提交的完美解决方法
2016/05/16 Javascript
JS自定义函数对web前端上传的文件进行类型大小判断
2016/10/19 Javascript
Vue.js开发环境快速搭建教程
2017/03/17 Javascript
Swiper实现轮播图效果
2017/07/03 Javascript
Vue 中使用vue2-highcharts实现曲线数据展示的方法
2018/03/05 Javascript
Vue2 添加数据可视化支持的方法步骤
2019/01/02 Javascript
[47:52]完美世界DOTA2联赛PWL S2 PXG vs InkIce 第二场 11.26
2020/11/30 DOTA
python爬虫常用的模块分析
2014/08/29 Python
python实现从ftp服务器下载文件的方法
2015/04/30 Python
python获取指定时间差的时间实例详解
2017/04/11 Python
解决Python一行输出不显示的问题
2018/12/03 Python
利用rest framework搭建Django API过程解析
2019/08/31 Python
常用python爬虫库介绍与简要说明
2020/01/25 Python
python爬虫 requests-html的使用
2020/11/30 Python
CSS3新增布局之: flex详解
2020/06/18 HTML / CSS
Html5页面点击遮罩层背景关闭遮罩层
2020/11/30 HTML / CSS
澳大利亚足球鞋和服装购物网站:Ultra Football
2018/10/11 全球购物
JNI的定义
2012/11/25 面试题
怎么样写好简历中的自我评价
2013/10/25 职场文书
工程管理英文求职信
2014/03/18 职场文书
班风学风建设方案
2014/05/06 职场文书
财会专业大学生求职信
2014/09/26 职场文书
家长评语怎么写
2014/12/30 职场文书
工地食品安全责任书
2015/05/09 职场文书
预备党员入党感言
2015/08/01 职场文书
Unicode中的CJK(中日韩统一表意文字)字符小结
2021/12/06 HTML / CSS
阿里云日志过滤器配置日志服务
2022/04/09 Servers
分享node.js实现简单登录注册的具体代码
2022/04/26 NodeJs