一、绑定事件的3种方式

1、内联绑定事件

2、on+事件名,绑定事件程序

3、通过addEventListener/removeEventListener绑定事件

不支持ie9之前的浏览器,ie9之前浏览器可以通过attachEvent/detachEvent绑定事件

这两种处理事件的方法有两个区别:

1、获取事件对象不同:attachEvent需要通过window对象来调用事件对象

2、获取节点不同:attachEvent事件中需要通过读取srcElement来获取,addEventListener通过target

3、处理阻止冒泡和阻止默认事件不同:阻止冒泡一个通过事件对象调用stopPropagation方法,一个通过设置事件对象的cancleBubble为true;

阻止默认行为一个通过事件对象调用preventDefault方法,一个通过设置事件对象的returnValue为false。

二、事件处理的流程

事件处理程序绑定的事件只要冒泡阶段。

addEventListener绑定的事件有捕获和冒泡两个阶段

捕获阶段:事件触发从window到目标对象

冒泡阶段:事件触发从目标对象到window传播

addEventListener这个方法的第三个参数默认为false,触发事件时先捕获再冒泡,如果设置这个参数为true则没有冒泡阶段。

addEventListener可以给一个元素同时绑定多个事件,如果同时注册冒泡和捕获事件,则按注册顺序执行。

三、事件代理

事件代理就是利用事件冒泡的原理,通过在父元素上绑定事件,来代替在每个子元素上绑定事件,节省了大量重复的事件监听。

参考资料:

文档对象模型事件:https://www.w3.org/TR/DOM-Level-2-Events/events.html#Events-Event

前端工程师手册:https://leohxj.gitbooks.io/front-end-database/javascript-basic/events.html

https://developer.mozilla.org/zh-CN/docs/Learn/JavaScript/Building_blocks/Events

JS之事件机制的更多相关文章

  1. js的事件机制二

    js的事件机制二 1.给合适的HTML标签添加合适的事件 onchange-----select下拉框 onload-----body标签 单双击-----用户会进行点击动作的HTML元素 鼠标事件 ...

  2. js的事件机制

    js的事件机制 解释:当我们的行为动作满足了一定的条件后,会触发某事务的执行. 内容: 1.单双击事件 单击:onclick 当鼠标单击时候会触发 双击:ondbclick 当鼠标双击时候会触发 2. ...

  3. 一张图看懂 JS 的事件机制

    一.为什么 JavaScript 单线程 假定JavaScript同时有两个线程,一个线程在某个DOM节点上添加内容,另一个线程删除了这个节点,这时浏览器应该以哪个线程为准? 为了避免复杂性, JS ...

  4. 我也来说说js的事件机制

    原文链接:http://www.w3cfuns.com/notes/17398/8062de2558ef495ce6cb7679f940ae5c.html 学js,不懂事件机制,基本可以说学了js,就 ...

  5. node.js 的事件机制

    昨天到今天, 又看了一边node 的事件模块,  觉得很神奇~  分享一下  - -> 首先, 补充下对node 的理解: nodeJs 是一个单进程单线程应用程序, 但是通过事件和回调支持并发 ...

  6. 初步理解JS的事件机制

    一.事件流(捕获,冒泡)   事件流:指从页面中接收事件的顺序,有冒泡流和捕获流. 当页面中发生某种事件(比如鼠标点击,鼠标滑过等)时,毫无疑问子元素和父元素都会接收到该事件,可具体顺序是怎样的呢?冒 ...

  7. js内部事件机制--单线程原理

    原文地址:https://www.xingkongbj.com/blog/js/event-loop.html http://www.haorooms.com/post/js_xiancheng ht ...

  8. node.js之事件机制

    EventEmitter类 方法名与参数 描述 参数说明 addListener(event,listener) 对指定的事件绑定事件处理函数 参数一是事件名称,参数二是事件处理函数 on(event ...

  9. JavaScript 详说事件机制之冒泡、捕获、传播、委托

    DOM事件流(event  flow )存在三个阶段:事件捕获阶段.处于目标阶段.事件冒泡阶段. 事件捕获(event  capturing):通俗的理解就是,当鼠标点击或者触发dom事件时,浏览器会 ...

随机推荐

  1. flask使用蓝图,创建副本

    随着flask的发展,flask框架越来越复杂,我们需要进行模块化处理,因为之前学过python模块化管理,我可以对一个flask程序进行简单的模块化处理. 我们都有一个博客程序,由此可知博客的前端界 ...

  2. 质因子分解(Pollard_Rho法)

    LL Pollard_Rho(LL n, LL c) { LL x, y, d; LL i = , k = ; x = y = rand() % n; do { i++; d = gcd(n + y ...

  3. ubuntu shell插件

    1. NetSpeed 在状态栏显示当前网速 2. Screenshot Tool 同样在 Ubuntu 18.04 之前我们使用 Shutter,但在Ubuntu 18.04 Shutter的托盘图 ...

  4. 命令提示符操作及Java的特点

    day1_3 命令提示符的操作 GUI 图形化方式(可视化) CLI 命令行方式 (编程方式) dir 列出当前目录下文件及文件夹 md 创建文件夹 rd 删除文件夹(只能删除空文件夹) cd 进入指 ...

  5. Python学习手册

    基础 概念 源码编译为字节码,解释器解释字节码 CPython是python标准实现方式,Jython将源码编译为java字节码,运行在JVM上 优点:快速开发,灵活的核心数据类型,优美的缩进语法,垃 ...

  6. hdu2732 Leapin' Lizards 最大流+拆点

    Your platoon of wandering lizards has entered a strange room in the labyrinth you are exploring. As ...

  7. !!!!---linux常见问题和解决方案--我的

    -------------------------------------------------------------磁盘 ---------------------------文件.目录1.删除 ...

  8. centos Cannot allocate memory for the buffer pool

    mysql 无法启动 ,查看日志: --01T15::.401599Z [Warning] TIMESTAMP with implicit DEFAULT value is deprecated. P ...

  9. Cassandra--设置数据保留时间

    在Cassandra中,可以设置列的保留时间(Time To Live),当该列超过保留时间后,会下一次读取中被墓碑(Tombstone)标记,然后保留一个垃圾回收周期(表属性gc_grace_sec ...

  10. mysql不存在插入否则更新

    1.如果存在就更新,没有就插入,相当于三目运算 CREATE UNIQUE INDEX xxx ON t_msg_user_view(USER_ID); INSERT INTO xxx(user_id ...