看到一篇文章,讲了什么是事件气泡以及如何组织事件气泡,我觉得讲的很好,分享一下。

(1)什么是事件起泡
首先你要明白一点,当一个事件发生的时候,该事件总是有一个事件源,即引发这个事件的对象,一个事件不能凭空产生,这就是事件的发生。

当事件发生后,这个事件就要开始传播。为什么要传播呢?因为事件源本身并没有处理事件的能力。例如我们点击一个按钮时,就会产生一个click事件,但这个按钮本身不能处理这个事件(废话),事件必须从这个按钮传播出去,从而到达能够处理这个事件的代码中(例如我们给按钮的onclick属性赋一个函数的名字,就是让这个函数去处理该按钮的click事件)。

当事件在传播过程中,找到了一个能够处理它的函数,这时候我们就说这个函数捕捉到了这个事件。

说到这里,关键的问题来了,那就是一个函数是如何捕捉一个事件的呢?这就涉及到事件的冒泡了。

为了更好地理解冒泡的概念,我建议你现在想象一下你的面前放着一杯水,但这杯水和我们平时看到的有点点不同,它分为数层,每一层又分成一或多个区域,最顶层是我们熟悉的窗口对象(即window对象),下一层分为好几个区域(document对象、history对象等等),而document对象的下一层又分为多个子对象。

这些对象的层次关系构成了DOM中的对象树。
事件的传播是有方向的,当点击一个按钮时所产生的事件从这个按钮处开始向上传播(就像一个水泡从杯底冒上来,这就是之所以叫事件冒泡的原因),但这个事件总是寻找特定的属性是否有值。例如按钮的click事件先寻找在按钮上是否有onclick属性的有意义的定义(即该属性指向一个存在的函数或一段可执行的语句),如果有,执行这个函数或语句;然后事件继续向上传播,到达按钮的上一层对象(例如一个form对象或document对象,总之是包含了按钮的父对象),如果该对象也定义了onclick属性,则执行属性的值。

所以,如果这个按钮上面有3层(form、document、window),且这三层都定义了onclick属性,则当按钮的click事件产生时,将会调用4个(包括按钮本身的一个)函数或执行4段语句。

事件的这几个特性在0级dom中也是适用的。

(2)jquery阻止事件起泡实例

1、通过返回false来取消默认的行为并阻止事件起泡。

jQuery 代码:

$("form").bind(

  "submit",

function() {

return false;

}

);

2、通过使用 preventDefault() 方法只取消默认的行为。

jQuery 代码:

$("form").bind(

"submit",

function(event){
event.preventDefault();
}

);

3、通过使用 stopPropagation() 方法只阻止一个事件起泡。

jQuery 代码:

$("form").bind(

"submit",

function(event){
event.stopPropagation();
}

);

(3)关于js事件起泡的验证

今天这个问题主要涉及到几个关键词:对象,触发事件,捕获事件,执行处理、起泡。这其实就是整个js执行的过程。其中冒泡这个过程很有意思。其实就像是一杯水,但是这杯水是分层次的,最底下是当前触发事件的对象。然后越往上范围越大,最顶层肯定是window,倒数第二层是document。气泡在上浮过程中会判断当前所到达的层有没有绑定事件处理方法。有话就执行相应的处理。没有的话就继续起泡。直到到达最顶层的window窗口层。我们可以在任何一层做相应的处理以阻止事件继续起泡。方法就是调用事件对象的阻止起泡的方法。event.stopPropagation();下面是写的一个验证js事件起泡的过程方法。

<script type="text/javascript">

$(document).ready(function(){

$('.one').click(function(e){

alert('one');

});            

$('.two').click(function(e){         

alert('two');

});

$('.three').click(function(e){

alert('three');

//阻止起泡取消下面的注释

// e.stopPropagation();

});

});

</script>

<div class="one" style="width:200px;height:200px;background:green;">

one

<div class="two" style="width:150px;height:150px;background:yellow;">

two

<div class="three">

three

</div>

</div>

</div>

(4)总结

1.一个事件起泡对应触发的是上层的同一事件
  特殊:如果two设置成双击事件,那么在你单击two的时候就会起泡触发one单击的事件
  (双击包含单击)。

2.如果在click事件中,在你要处理的事件之前加上e.preventDefault();
 那么就取消了行为(通俗理解:相当于做了个return操作),不执行之后的语句了。

3.e.stopPropagation()只要在click事件中,就不会触发上层click事件。


http://blog.163.com/chtx87_98/blog/static/654011192011830928585/    这是原网址

js中什么是事件气泡,如何阻止事件气泡相关推荐

  1. js事件冒泡、阻止事件冒泡以及阻止默认行为

    大家好,我是IT修真院武汉分院web第17期的学员吴三水,一枚正直纯洁善良的web程序员. 今天给大家分享一下,修真院官网js(职业)任务四,深度思考中的知识点--js事件冒泡.阻止事件冒泡以及阻止默 ...

  2. 事件冒泡及阻止事件冒泡 事件的触发 事件参数对象 获取用户按下键盘的键

    事件冒泡及阻止事件冒泡 <!DOCTYPE html> <html lang="en"> <head><meta charset=&quo ...

  3. js 事件流的事件冒泡和事件捕获与阻止事件传播

    为了方便引入事件流的概念,我们先来说说什么是事件. 事件就是用户或浏览器自身执行的某种动作.换句话说,我们在浏览网页或者 APP 时,通常会在设备上产生很多交互性的操作,例如点击.选择.滚动屏幕.键盘 ...

  4. JS——事件冒泡与阻止事件冒泡

    文章目录 前言 一.DOM事件流 1.什么是事件流呢? 2.事件流的两种方式 2.1 事件冒泡 2.2 事件捕获 2.3 DOM事件的3个阶段 二.事件对象 1.什么是事件对象 2.事件对象的使用 3 ...

  5. js 事件冒泡、阻止事件冒泡

    JS事件流其中一种是冒泡事件,当一个元素被触发一个事件时,该目标元素的事件会优先被执行,然后向外传播到每个祖先元素,恰如水里的一个泡泡似的,从产生就一直往上浮,到在水平面时,它才消失.在这个过程中,如 ...

  6. html,js 中如何屏蔽div子元素点击事件会触发父元素的点击事件($event.cancelBubble=true;)

    1. 第一种方法:html中屏蔽父元素的点击事件($event.cancelBubble=true;) <div (click)="select($event)"> & ...

  7. [JS] 事件冒泡,阻止事件冒泡,事件的三个阶段(捕获,目标,冒泡)

    事件冒泡 添加三个套在一起的div元素,在最里面放一个button,感受事件触发时从里到外"冒泡"的过程. 给每个div都加一个事件:点击时就alert test.html < ...

  8. JS 事件高级(包括DOM事件流,阻止事件冒泡,阻止事件默认行为,,,以及对我来说,很好用的 事件代理)

    事件对象概念 事件处理函数:事件发生时调用的函数 事件对象:window.event,内置的对象,事件发生的时候会将所有和事件相关的信息都存储在事件对象中,鼠标位置,事件类型,事件目标... //事件 ...

  9. 原声js 的兼容(屏幕尺寸、事件处理程序、阻止事件冒泡、事件目标等等)

    1.事件处理程序 function addEvent(obj, type, fn) { //添加事件兼容 if (obj.addEventListener) { obj.addEventListene ...

  10. 利用事件冒泡和阻止事件冒泡的例子

    利用事件冒泡机制 页面中的评分界面,大家一定都很熟悉,现在假如我开了一家饭店,我需要一个在我们的网页上能让顾客对我的饭店进行打分.首先,我们需要两张星星的图片,一张是灰的的星星,一张是黄色的星星,我们 ...

最新文章

  1. Uva 3767 Dynamic len(set(a[L:R])) 树套树
  2. OpenLayers辅助函数Util.js(三)
  3. Python 进阶_OOP 面向对象编程_self 的实例绑定
  4. python常用模块(一)
  5. MYSQL教程之 concat
  6. linux同步数据库,Linux两台服务器mysql数据库同步
  7. 万象物语找回服务器,万象物语新手大型攻略 服务器、初始号的选择和新手前期需要做的事说明...
  8. Centos7.0 中的中iptables、firewall和SELINUX
  9. mysql如何怎么进行单表的单条数据删除--根据id进行删除
  10. linux下音频剪辑软件,音频剪辑软件哪个好用?5款免费开源的音频剪辑软件推荐...
  11. 周育如的音标口诀大全_音标记忆顺口溜(48个),快速记忆音标口诀!
  12. 韦伯-费纳希定律,前景理论及其在数据科学中的应用
  13. 【链表】找出直系亲属
  14. 大疆文档(4)-Android教程-应用程序激活和飞机绑定
  15. 天池大数据比赛-菜鸟仓库比赛-第二赛季记录
  16. 沉睡者IT - 抖音中视频计划赚钱项目初级教程
  17. BPF之巅--洞悉Linux系统和应用性能 Brendan Gregg
  18. linux怎么刷机教程,Ubuntu手机版来了 附刷机教程
  19. 一、2、JAVA--集合
  20. 计算机图形学基础学习笔记-其一:向量与线性代数

热门文章

  1. EMERGENCY! EUREKA MAY BE INCORRECTLY CLAIMING INSTANCES ARE UP WHEN THEY'RE NOT.
  2. 金球奖提名!5家自主品牌「争夺」年度高阶智能辅助驾驶系统
  3. excel公式编辑器_用EXCEL图表制作时钟「内容详细,配有大量动画操作,值得收藏」
  4. html语言定义诗歌教学实例,小班语言活动案例分析:古诗清明
  5. C语言填空概念题及答案,C语言填空题以及答案
  6. 30分钟轻松在华为云上搭建网站应用(零基础手把手教学)
  7. css实现一个正方形
  8. 使用STM32进行Flash地址空间的数据读取
  9. 离散数学笔记--重言式
  10. 2020.8.8List、Set集合练习