从click事件理解DOM事件流
事件流是用来解释页面上的不同元素接受一个事件的顺序,首先要明确两点:
1.一个事件的影响元素可能不止一个(同心圆理论),但目标元素只有一个。
2.如果这些元素都绑定了相同名称的事件函数,我们怎么知道这些函数的运行顺序?于是有了事件流的概念(事件捕捉,事件冒泡)
举个例子:
<div id="outer">
<p id="inner">Click me!</p>
</div>
为了看起来方便,先无视CSS样式,那么蓝色的区域是P,红色的区域是外面的div,这个时候鼠标点击在蓝色的区域内,那么p元素就是这个事件的目标元素,虽然它也触发了div甚至body等的click事件,但目标元素只有且始终是p。DOM事件流就像往返跑一样,代表折返点的标志牌就是这个目标元素。即使p本身没有绑定事件函数,这个事件流依然会从Document跑到p再跑回去。

如果我点在蓝色区域右下侧,红色区域内部的地方,那么目标元素就变成div,没p元素什么事儿了。
然后再理解事件函数就比较轻松了,比如在折返点p前方50米处有一个点叫div,你收到一个指令“在div处喝完一瓶水”,那显然有两此机会可以做这件事,一次是在去p的路上,一次是在从P返回的时候。分别对应发生在事件捕获阶段和事件冒泡阶段。通过DOM2级事件处理程序是可以自由选择的,但鉴于你只有一瓶水,只能选一次机会拿出来喝。
事件函数中this始终指向被它绑定的元素(轮到处理事件的元素),因此,div的click函数内this代表div,而p的click函数内this代表p。而target作为实际目标永远指向p。
再举个例子:
如果我想要弹出提示框,显示p里面的文本,在p的click函数中使用this.innerHTML就可以解决。如果我不把事件绑定在p上,而是绑在div上,那么就要获取event.target.innerHTML,因为this会指向div。 参考文章:
http://blog.csdn.net/alex8046/article/details/51982542
https://segmentfault.com/a/1190000000749838
从click事件理解DOM事件流的更多相关文章
- 理解DOM事件流的三个阶段
本文主要解决两个问题: 1.什么是事件流 2.DOM事件流的三个阶段 事件流之事件冒泡与事件捕获 在浏览器发展的过程中,开发团队遇到了一个问题.那就是页面中的哪一部分拥有特定的事件? 可以想象画在一张 ...
- javascript:理解DOM事件
首先,此文不讨论繁琐细节,但是考虑到读者的心灵感受,本着以积极向上的心态,在此还是会列举示例说明. 标题为理解DOM事件,那么在此拿一个简单的点击事件为例,希望大家看到这个例子后能触类旁通. DOM ...
- 深度理解DOM事件(实例)
前言 通过如下两个实例来理解DOM事件 实例1--点击别处关闭浮层 onclick与addEventListener的区别 实例2--点击后颜色一层一个层出现的漂亮的彩虹圈 1 实例1--点击别处关 ...
- 深入理解DOM事件机制系列第一篇——事件流
× 目录 [1]历史 [2]事件冒泡 [3]事件捕获[4]事件流 前面的话 javascript操作CSS称为脚本化CSS,而javascript与HTML的交互是通过事件实现的.事件就是文档或浏览器 ...
- 深入理解DOM事件机制系列第三篇——事件对象
× 目录 [1]获取 [2]事件类型 [3]事件目标[4]事件代理[5]事件冒泡[6]事件流[7]默认行为 前面的话 在触发DOM上的某个事件时,会产生一个事件对象event,这个对象中包含着所有与事 ...
- DOM事件: DOM事件级别、DOM事件流、DOM事件模型、DOM事件捕获过程、自定义事件
前端面试中只要问到事件,就肯定会有DOM事件:如果回答出来了,就会一直向下延申,其实这些东西都很简单,但我第一次被问到的时候,也是懵的: DOM事件级别: DOM0 element.onclick = ...
- 深入理解DOM事件类型系列第一篇——鼠标事件
× 目录 [1]类型 [2]顺序 [3]坐标位置[4]修改键[5]相关元素[6]鼠标按键[7]滚轮事件[8]移动设备 前面的话 鼠标事件是web开发中最常用的一类事件,毕竟鼠标是最主要的定位设备.本文 ...
- 深入理解DOM事件类型系列第五篇——文本事件
× 目录 [1]change [2]textInput [3]input[4]propertychange[5]兼容 前面的话 如果DOM结构发生变化,触发的是变动事件:如果文本框中的文本发生变化,触 ...
- 深入理解DOM事件类型系列第三篇——变动事件
× 目录 [1]删除节点 [2]插入节点 [3]特性节点[4]文本节点 前面的话 变动(mutation)事件能在DOM中的某一部分发生变化时给出提示,这类事件非常有用,但都只能使用DOM2级事件处理 ...
随机推荐
- Lua查找表元素过程(元表、__index方法是如何工作的)
近日开始研究Lua,在元表的使用上照猫画虎地搞了两下,实现了“面向对象”,但究其本质却略有不解,后咨询牛哥得解,特此记录. Lua的表本质其实是个类似HashMap的东西,其元素是很多的Key-Val ...
- PHP易混淆函数的区分方法及意义
1.echo和print的区别 PHP中echo和print的功能基本相同(输出),但是两者之间还是有细微差别的.echo输出后没有返回值,但print有返回值,当其执行失败时返回flase.因此 ...
- WIN32服务程序(一):创建服务
MSDN中有安装服务的例子Installing a Service(可点击进入),我们这里的创建服务,和MSDN里的例子基本上是一样的.这里做一些简单的说明: 打开控制面板,管理工具,服务.我们看到的 ...
- scrollView中可以自由滚动的listview
直接在scrollView中写listview等可滚动控件会出现子控件高度计算的问题,为了解决这个问题,找到的方案是重写listview中的onmeasure方法: @Override public ...
- PARSEC-3.0编译错误
OS: Ubuntu 14.04 LTS (x86_64) ***error 1 OpenSSL 1.0.1e 与 perl5.18 不兼容 POD document had syntax error ...
- 关于ref的一点理解
先写一段代码 class Test { public int Count { get; set; } } static void Main(string[] args) { Test test = } ...
- Arduino101/Genuino101的安装入门
1.首先下载Arduino IDE 下载地址:http://pan.baidu.com/s/1gewqV2j 选择arduino-1.6.8-windows. ...
- GithubPage 的简单使用
这是我第一次写博客,主要是记录自己前端学习的经历.这次写一下GitHubpage 的简单使用.我用这里并没有想挂博客,主要是挂自己的一些小作品应用到简历中. 第一步: 首先先注册Github账号,创建 ...
- Lua 中string.gsub(sourceString, pattern, replacementString) 返回值有两个
这阵子在学习lua,今天看到string操作,书中描述string.gsub(sourceString, pattern, replacementString)返回一个字符串,但是我在实际操作中却发现 ...
- MFC的几处坑
本人愚笨,一个滚动条控件还让我研究了几天,记录下成果. 1. GetScrollRange();获取滚动条的范围,个人觉得用意不大. GetScrollLimit();获取滚动按钮活动的范围 Scro ...