浅谈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 相关文章推荐
jQuery 图像裁剪插件Jcrop的简单使用
May 22 Javascript
ExtJs纵坐标值重复问题的解决方法
Feb 27 Javascript
使用JQ来编写最基本的淡入淡出效果附演示动画
Oct 31 Javascript
jQuery ready()和onload的加载耗时分析
Sep 08 Javascript
hovertree插件实现二级树形菜单(简单实用)
Dec 28 Javascript
Javascript循环删除数组中元素的几种方法示例
May 18 Javascript
node.js实现的装饰者模式示例
Sep 06 Javascript
Nuxt使用Vuex的方法示例
Sep 06 Javascript
vue中nextTick用法实例
Sep 11 Javascript
js实现单元格拖拽效果
Feb 10 Javascript
如何用JS模拟实现数组的map方法
Jul 30 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
将数组写入txt文件 var_export
2009/04/21 PHP
ie与session丢失(新窗口cookie丢失)实测及解决方案
2013/07/15 PHP
php入门教程之Zend Studio设置与开发实例
2016/09/09 PHP
PHP数字前补0的自带函数sprintf 和number_format的用法(详解)
2017/02/06 PHP
[原创]php token使用与验证示例【测试可用】
2017/08/30 PHP
PHP基于phpqrcode类生成二维码的方法示例详解
2020/08/07 PHP
使用js dom和jquery分别实现简单增删改
2014/09/11 Javascript
JS实现适合于后台使用的动画折叠菜单效果
2015/09/21 Javascript
JavaScript实现多种排序算法
2016/02/24 Javascript
详解jQuery的Cookie插件
2016/11/23 Javascript
微信小程序 闭包写法详细介绍
2016/12/14 Javascript
详解基于Angular4+ server render(服务端渲染)开发教程
2017/08/28 Javascript
基于js原生和ajax的get和post方法以及jsonp的原生写法实例
2017/10/16 Javascript
浅谈vue,angular,react数据双向绑定原理分析
2017/11/28 Javascript
vue 实现单选框设置默认选中值
2019/11/07 Javascript
浅谈vue项目利用Hbuilder打包成APP流程,以及遇到的坑
2020/09/12 Javascript
python 正则式 概述及常用字符
2009/05/07 Python
Python中使用dom模块生成XML文件示例
2015/04/05 Python
详解Python的单元测试
2015/04/28 Python
Python使用struct处理二进制的实例详解
2017/09/11 Python
Python入门之后再看点什么好?
2018/03/05 Python
Python读取系统文件夹内所有文件并统计数量的方法
2018/10/23 Python
用Python实现读写锁的示例代码
2018/11/05 Python
Python3环境安装Scrapy爬虫框架过程及常见错误
2019/07/12 Python
python3实现raspberry pi(树莓派)4驱小车控制程序
2020/02/12 Python
PageFactory设计模式基于python实现
2020/04/14 Python
.NET面试10题
2014/02/24 面试题
初中生期末考试的自我评价
2013/12/17 职场文书
担保书怎么写
2014/04/01 职场文书
元旦寄语大全
2014/04/10 职场文书
战略合作协议书范本
2014/04/18 职场文书
个人贷款授权委托书样本
2014/10/07 职场文书
新员工入职欢迎词
2015/01/23 职场文书
中学教师个人总结
2015/02/10 职场文书
争做文明公民倡议书
2019/06/24 职场文书
Spring Data JPA框架Repository自定义实现
2022/04/28 Java/Android