浅谈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对JSON进行模式匹配 (Part 2 - 实现)
Jul 17 Javascript
js动态切换图片的方法
Jan 20 Javascript
javascript中动态函数用法实例分析
May 14 Javascript
JS控制层作圆周运动的方法
Jun 20 Javascript
微信QQ的二维码登录原理js代码解析
Jun 23 Javascript
Three.js学习之正交投影照相机
Aug 01 Javascript
Angular2 父子组件通信方式的示例
Jan 29 Javascript
React组件重构之嵌套+继承及高阶组件详解
Jul 19 Javascript
解决jQuery使用append添加的元素事件无效的问题
Aug 30 jQuery
ES6中let 和 const 的新特性
Sep 03 Javascript
js实现选项卡效果
Mar 07 Javascript
vue 在服务器端直接修改请求的接口地址
Dec 19 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
分享8个最佳的代码片段在线测试网站
2013/06/29 PHP
PHP中使用file_get_contents抓取网页中文乱码问题解决方法
2014/12/17 PHP
WordPress中is_singular()函数简介
2015/02/05 PHP
Yii2框架加载css和js文件的方法分析
2019/05/25 PHP
用php定义一个数组最简单的方法
2019/10/04 PHP
Laravel第三方包报class not found的解决方法
2019/10/13 PHP
初学Javascript的一些总结
2008/11/03 Javascript
js克隆对象、数组的常用方法介绍
2013/09/26 Javascript
jQuery防止click双击多次提交及传递动态函数或多参数
2014/04/02 Javascript
JS中产生20位随机数以0-9为例也可以是a-z A-Z
2014/08/01 Javascript
js监听鼠标事件控制textarea输入字符串的个数
2014/09/29 Javascript
jQuery中removeData()方法用法实例
2014/12/27 Javascript
浅谈Jquery核心函数
2015/06/18 Javascript
JQUERY实现网页右下角固定位置展开关闭特效的方法
2015/07/27 Javascript
jQuery左右滚动支持图片放大缩略图图片轮播代码分享
2015/08/26 Javascript
JS实现不规则TAB选项卡效果代码
2015/09/16 Javascript
JS代码屏蔽F12,右键,粘贴,复制,剪切,选中,操作实例
2019/09/17 Javascript
Vue 的 v-model用法实例
2020/11/23 Vue.js
Python break语句详解
2014/03/11 Python
python技能之数据导出excel的实例代码
2017/08/11 Python
Python TestCase中的断言方法介绍
2019/05/02 Python
Ubuntu下Python+Flask分分钟搭建自己的服务器教程
2019/11/19 Python
基于Django OneToOneField和ForeignKey的区别详解
2020/03/30 Python
Ubuntu中配置TensorFlow使用环境的方法
2020/04/21 Python
Pandas替换及部分替换(replace)实现流程详解
2020/10/12 Python
性能服装:HYLETE
2018/08/14 全球购物
linux下进程间通信的方式
2013/01/23 面试题
生物技术专业研究生自荐信
2013/09/22 职场文书
生日宴会答谢词
2014/01/09 职场文书
父亲生日宴会答谢词
2014/01/10 职场文书
2014年民政局关于保密工作整改措施
2014/09/19 职场文书
结婚保证书(卖身契)
2015/02/26 职场文书
刑事辩护词范文
2015/05/21 职场文书
SpringBoot项目部署到阿里云服务器的实现步骤
2022/06/28 Java/Android
python读取mat文件生成h5文件的实现
2022/07/15 Python
数据设计之权限的实现
2022/08/05 MySQL