浅谈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 相关文章推荐
js 在定义的时候立即执行的函数表达式(function)写法
Jan 16 Javascript
使用JS画图之点、线、面
Jan 12 Javascript
jquery复选框多选赋值给文本框的方法
Jan 27 Javascript
javascript实现字符串反转的方法
Feb 05 Javascript
Javascript中的Callback方法浅析
Mar 15 Javascript
一看就懂:jsonp详解
Jun 01 Javascript
AngularJS+bootstrap实现动态选择商品功能示例
May 17 Javascript
js自定义input文件上传样式
Oct 26 Javascript
详解React项目中碰到的IE问题
Mar 14 Javascript
微信接入之获取用户头像的方法步骤
Sep 23 Javascript
简单了解微信小程序 e.target与e.currentTarget的不同
Sep 27 Javascript
javascript设计模式 ? 备忘录模式原理与用法实例分析
Apr 21 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
function.inc.php超越php
2006/12/09 PHP
table标签的结构与合并单元格的实现方法
2013/07/24 PHP
laravel框架中表单请求类型和CSRF防护实例分析
2019/11/23 PHP
PHP扩展类型及安装方式解析
2020/04/27 PHP
用js实现的页面关键字密度查询代码
2007/12/27 Javascript
基于jquery点击自以外任意处,关闭自身的代码
2012/02/10 Javascript
jQuery基础框架浅入剖析
2012/12/27 Javascript
学习使用AngularJS文件上传控件
2016/02/16 Javascript
简介BootStrap model弹出框的使用
2016/04/27 Javascript
谈谈因Vue.js引发关于getter和setter的思考
2016/12/02 Javascript
Javascript实现倒计时(防页面刷新)实例
2016/12/13 Javascript
纯原生js实现table表格的增删
2017/01/05 Javascript
react使用antd表单赋值,用于修改弹框的操作
2020/10/29 Javascript
java直接调用python脚本的例子
2014/02/16 Python
python中反射用法实例
2015/03/27 Python
python中函数传参详解
2016/07/03 Python
Tensorflow 合并通道及加载子模型的方法
2018/07/26 Python
Python3.5基础之变量、数据结构、条件和循环语句、break与continue语句实例详解
2019/04/26 Python
pandas DataFrame索引行列的实现
2019/06/04 Python
用python生成与调用cntk模型代码演示方法
2019/08/26 Python
使用 css3 实现圆形进度条的示例
2017/07/05 HTML / CSS
浅谈Html5中视频 音频标签 进度条的问题
2016/07/26 HTML / CSS
Omio美国:全欧洲低价大巴、火车和航班搜索和比价
2017/11/08 全球购物
中国首家奢侈品O2O网购平台:第五大道奢侈品网
2017/12/14 全球购物
舒适的豪华鞋:Taryn Rose
2018/05/03 全球购物
巴西购物网站:Estrela10
2018/12/13 全球购物
阿迪达斯英国官方网站:adidas英国
2019/08/13 全球购物
Internet体系结构
2014/12/21 面试题
入党积极分子思想汇报范文
2014/01/05 职场文书
同学聚会欢迎辞
2014/01/14 职场文书
信访工作经验交流材料
2014/05/23 职场文书
走群众路线剖析材料
2014/10/09 职场文书
六查六看自检自查剖析材料
2014/10/14 职场文书
2014年底个人工作总结
2015/03/10 职场文书
毕业答辩开场白范文
2015/05/27 职场文书
JavaScript中10个Reduce常用场景技巧
2022/06/21 Javascript