JS之事件机制
一、绑定事件的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之事件机制的更多相关文章
- js的事件机制二
js的事件机制二 1.给合适的HTML标签添加合适的事件 onchange-----select下拉框 onload-----body标签 单双击-----用户会进行点击动作的HTML元素 鼠标事件 ...
- js的事件机制
js的事件机制 解释:当我们的行为动作满足了一定的条件后,会触发某事务的执行. 内容: 1.单双击事件 单击:onclick 当鼠标单击时候会触发 双击:ondbclick 当鼠标双击时候会触发 2. ...
- 一张图看懂 JS 的事件机制
一.为什么 JavaScript 单线程 假定JavaScript同时有两个线程,一个线程在某个DOM节点上添加内容,另一个线程删除了这个节点,这时浏览器应该以哪个线程为准? 为了避免复杂性, JS ...
- 我也来说说js的事件机制
原文链接:http://www.w3cfuns.com/notes/17398/8062de2558ef495ce6cb7679f940ae5c.html 学js,不懂事件机制,基本可以说学了js,就 ...
- node.js 的事件机制
昨天到今天, 又看了一边node 的事件模块, 觉得很神奇~ 分享一下 - -> 首先, 补充下对node 的理解: nodeJs 是一个单进程单线程应用程序, 但是通过事件和回调支持并发 ...
- 初步理解JS的事件机制
一.事件流(捕获,冒泡) 事件流:指从页面中接收事件的顺序,有冒泡流和捕获流. 当页面中发生某种事件(比如鼠标点击,鼠标滑过等)时,毫无疑问子元素和父元素都会接收到该事件,可具体顺序是怎样的呢?冒 ...
- js内部事件机制--单线程原理
原文地址:https://www.xingkongbj.com/blog/js/event-loop.html http://www.haorooms.com/post/js_xiancheng ht ...
- node.js之事件机制
EventEmitter类 方法名与参数 描述 参数说明 addListener(event,listener) 对指定的事件绑定事件处理函数 参数一是事件名称,参数二是事件处理函数 on(event ...
- JavaScript 详说事件机制之冒泡、捕获、传播、委托
DOM事件流(event flow )存在三个阶段:事件捕获阶段.处于目标阶段.事件冒泡阶段. 事件捕获(event capturing):通俗的理解就是,当鼠标点击或者触发dom事件时,浏览器会 ...
随机推荐
- Gym - 101889D:Daunting device (老司机树)
题意:N个格子排出一排,开始格子颜色都是1:现在有M个操作: 或,把区间[L,R]颜色改为c: 或,查询一共有多少格子颜色为c. 最后求颜色最多的数量. 数据是随机的,且强制在线. 思路:ODT裸题. ...
- Readability Assessment for Text Simplification -paper
https://pdfs.semanticscholar.org/e43a/3c3c032cf3c70875c4193f8f8818531857b2.pdf 1.introduction在Brazil ...
- D. The Fair Nut and the Best Path 树形dp (终于会了)
#include<bits/stdc++.h> #define int long long using namespace std; ; int a[maxn]; int dp[maxn] ...
- PHP用户登录解析
Web上的用户登录功能应该是最基本的功能了,可是在我看过一些站点的用户登录功能后,我觉得很有必要写一篇文章教大家怎么来做用户登录功能.下面 的文章告诉大家这个功能可能并没有你所想像的那么简单,这是一个 ...
- redis源码之压缩列表ziplist
压缩列表ziplist1.简介连续,无序的数据结构.压缩列表是 Redis 为了节约内存而开发的, 由一系列特殊编码的连续内存块组成的顺序型(sequential)数据结构. 2.组成 属性 类型 长 ...
- export的变量另开一个终端失效解决方法
有时候,我们需要把一个export的变量全局话,否则每开一个终端又需要重新export,很是麻烦 首先直接export某个变量的话就只能在当前子终端生效,另开一个终端就失效了 如果修改.bash_pr ...
- nodejs-hook 开发
nodejs require hook 功能很强大,我们可以用来将不支持的数据文件,直接使用require 进行加载,同时 我们可以方便的进行代码的预编译(比如babel 的组件) 为了方便使用npm ...
- DevExpress 中 设置 labelControl 的背景透明到图片的方法
labelControl 中的 backColor 可以设置为: TransParent 当设置为: Transparent 的时候,labelControl 的背景依然为 主form的背景颜色 ,研 ...
- VIM命令操作
退出命令 :wq 保存并退出 ZZ 保存并退出 :q! 强制退出并忽略所有更改 :e! 放弃所有修改,并打开原来文件.
- Oracle数据类型与.NET中的对应关系
Oracle连接添加的引用不同,会存在数据类型不同以及其他一些差别,就工作中遇到的问题暂时总结下. 两种不同的添加引用语句: (1)System.Data.OracleClient; (2)Oracl ...