浅谈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高级程序设计(第3版)学习笔记4 js运算符和操作符
Oct 11 Javascript
JS HTML5 音乐天气播放器(Ajax获取天气信息)
May 26 Javascript
Mac地址验证的javascript代码
Nov 09 Javascript
Angular.js实现注册系统的实例详解
Dec 18 Javascript
js实现图片旋转 js滚动鼠标中间对图片放大缩小
Jul 05 Javascript
jquery手机触屏滑动拼音字母城市选择器的实例代码
Dec 11 jQuery
使用vue完成微信公众号网页小记(推荐)
Apr 28 Javascript
vue中keep-alive组件的入门使用教程
Jun 06 Javascript
vue 设置 input 为不可以编辑的实现方法
Sep 19 Javascript
Jquery+AJAX实现无刷新上传并重命名文件操作示例【PHP后台接收】
May 29 jQuery
JavaScript 常见的继承方式汇总
Sep 17 Javascript
js前端面试常见浏览器缓存强缓存及协商缓存实例
Jun 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
理解和运用PHP中的多态性[译]
2011/08/02 PHP
PHP base64编码后解码乱码的解决办法
2014/06/19 PHP
typecho插件编写教程(五):核心代码
2015/05/28 PHP
php使用Jpgraph绘制3D饼状图的方法
2015/06/10 PHP
PHP MPDF中文乱码的解决方式
2015/12/08 PHP
[原创]js获取数组任意个不重复的随机数组元素
2010/03/15 Javascript
Javacript实现颜色梯度变化和渐变的效果代码
2013/05/31 Javascript
Javascript连接多个数组不用concat来解决
2014/03/24 Javascript
JavaScript日期时间与时间戳的转换函数分享
2015/01/31 Javascript
javascript数据结构之二叉搜索树实现方法
2015/11/25 Javascript
javascript实现2016新年版日历
2016/01/25 Javascript
基于javascript显示当前时间以及倒计时功能
2016/03/18 Javascript
浅谈json取值(对象和数组)
2016/06/24 Javascript
微信小程序 参数传递详解
2016/10/24 Javascript
JavaScript数据结构之广义表的定义与表示方法详解
2017/04/12 Javascript
LayUI表格批量删除方法
2018/08/15 Javascript
使用JS实现鼠标放上图片进行放大离开实现缩小功能
2021/01/27 Javascript
Javascript实现关闭广告效果
2021/01/29 Javascript
[06:53]DOTA2每周TOP10 精彩击杀集锦vol.3
2014/06/25 DOTA
[01:10:58]Spirit vs NB Supermajor小组赛 A组败者组决赛 BO3 第二场 6.2
2018/06/03 DOTA
Python转码问题的解决方法
2008/10/07 Python
python实现调用其他python脚本的方法
2014/10/05 Python
flask框架中勾子函数的使用详解
2018/08/01 Python
python实现简单的单变量线性回归方法
2018/11/08 Python
CentOS下Python3的安装及创建虚拟环境的方法
2018/11/28 Python
python 实现12bit灰度图像映射到8bit显示的方法
2019/07/08 Python
Python写出新冠状病毒确诊人数地图的方法
2020/02/12 Python
Python中使用threading.Event协调线程的运行详解
2020/05/02 Python
python调用有道智云API实现文件批量翻译
2020/10/10 Python
微信浏览器左上角返回按钮拦截功能
2017/11/21 HTML / CSS
捷克钓鱼用品网上商店:Parys.cz
2018/06/15 全球购物
Lookfantastic意大利官网:英国知名美妆购物网站
2019/05/31 全球购物
学生发电厂实习自我鉴定
2013/09/22 职场文书
北京申奥口号
2014/06/19 职场文书
幼儿园门卫岗位职责范本
2014/07/02 职场文书
微信小程序调用python模型
2022/04/21 Python