浅谈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 相关文章推荐
Using the TextRange Object
Oct 14 Javascript
jQuery插件原来如此简单 jQuery插件的机制及实战
Feb 07 Javascript
js 3种归并操作的实例代码
Oct 30 Javascript
在Node.js应用中读写Redis数据库的简单方法
Jun 30 Javascript
jQuery滚动新闻实现代码
Jun 26 Javascript
ros::spin() 和 ros::spinOnce()函数的区别及详解
Oct 01 Javascript
JS对大量数据进行多重过滤的方法
Nov 04 Javascript
JS实现数组去重,显示重复元素及个数的方法示例
Jan 21 Javascript
JavaScript禁止右击保存图片,禁止拖拽图片的实现代码
Apr 28 Javascript
JavaScript之scrollTop、scrollHeight、offsetTop、offsetHeight等属性学习笔记
Jul 15 Javascript
JS实现简单移动端鼠标拖拽
Jul 23 Javascript
详解为什么Vue中的v-if和v-for不建议一起用
Jan 13 Vue.js
微信小程序 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
Zend Guard一些常见问题解答
2008/09/11 PHP
php 代码优化之经典示例
2011/03/24 PHP
浅析php中抽象类和接口的概念以及区别
2013/06/27 PHP
php截取视频指定帧为图片
2016/05/16 PHP
PHP实现的62进制转10进制,10进制转62进制函数示例
2019/06/06 PHP
List the Codec Files on a Computer
2007/06/11 Javascript
让任务管理器中的CPU跳舞的js代码
2008/11/01 Javascript
在IE上直接编辑网页内容的js代码(IE地址栏js)
2009/04/27 Javascript
JS 控制CSS样式表
2009/08/20 Javascript
JavaScript OOP类与继承
2009/11/15 Javascript
js中document.getElementByid、document.all和document.layers区分介绍
2011/12/08 Javascript
解析javascript 浏览器关闭事件
2013/07/08 Javascript
node.js中使用node-schedule实现定时任务实例
2014/06/03 Javascript
ext combobox动态加载数据库数据(附前后台)
2014/06/17 Javascript
使用delegate方法为一个tr标签加一个链接
2014/06/27 Javascript
javascript设计模式之Adapter模式【适配器模式】实现方法示例
2017/01/13 Javascript
轻松学习Javascript闭包
2017/03/01 Javascript
彻底搞懂JavaScript中的apply和call方法(必看)
2017/09/18 Javascript
在Vue项目中引入JQuery-ui插件的讲解
2019/01/27 jQuery
jQuery AJAX应用实例总结
2020/05/19 jQuery
JavaScript用document.write()输出换行的示例代码
2020/11/26 Javascript
vue集成一个支持图片缩放拖拽的富文本编辑器
2021/01/29 Vue.js
python集合类型用法分析
2015/04/08 Python
Python统计日志中每个IP出现次数的方法
2015/07/06 Python
Python使用urllib2模块抓取HTML页面资源的实例分享
2016/05/03 Python
Python图算法实例分析
2016/08/13 Python
Python通用循环的构造方法实例分析
2018/12/19 Python
Python实现的调用C语言函数功能简单实例
2019/03/13 Python
Python列表的深复制和浅复制示例详解
2021/02/12 Python
土木工程毕业生自荐信
2013/09/21 职场文书
营销总经理的岗位职责
2013/12/15 职场文书
节约用水演讲稿
2014/05/21 职场文书
辞职信的写法
2015/02/27 职场文书
2015年司法局工作总结
2015/05/22 职场文书
python如何读取.mtx文件
2021/04/22 Python
Python爬虫基础之爬虫的分类知识总结
2021/05/13 Python