探讨Js的事件的冒泡阶段
近来看到了一个新的知识点叫Js的事件冒泡,因此决定自己来研究一番。
大家应该都知道,Js中的事件处理分为三个阶段,1:事件的捕获阶段,2:处于目标阶段,3:事件的冒泡阶段。那么什么是事件的捕获和冒泡呢?
从概念上来说,事件的捕获就是从最外层也就是从html标签开始向内一层层的寻找目标元素,直到捕获到目标为止。而事件的冒泡就是从目标开始,向上一层层的冒泡,直到最上一级为止。
单从概论上来说,可能不是那么的清楚,所以我们直接上代码。
<div id="div1">
<div id="div2">
<input type="button" id="btn" value="点我"/>
<a href="http://www.baidu.com" target="_black">百度</a>
</div>
</div>
首先在html中创建了如上的几个元素。
然后我们给id为"btn"的这个元素绑定一个click事件。
var btn = document.getElementById('btn');
btn.addEventListener('click',function(e){
alert(3);
4 });
然后,运行html,点击按钮,发现的结果是依次alert出了3、2、1。也就是说在触发子元素的click事件时,同时也触发了这个子元素上级的父元素的click事件,那么怎么才能在点击子元素时,不触发其父元素的事件呢?方法其实很简单。将以上的代码作如下的修改:
var btn = document.getElementById('btn');
btn.addEventListener('click',function(e){
alert(3);
e.stopPropagation();
});
然后,再运行,点击按钮,这次的结果就只alert出了1。
也就是说可以用e.stopPropagation()方法来阻止事件的冒泡。也有的人说,直接用return false;就可以了,但是我在测试的时候,发现,对于用js的addEventListener()方法绑定的事件,使用return false;是无法阻止事件冒泡的。然后使用jquery绑定的事件则是可以的。不过这两种方法还是有区别的。比如说我给html中的a链接也加上一个事件。
var link = document.getElementsByTagName('a')[0];
link.addEventListener('click',function(e){
alert(3);
});
然后,点击链接,结果是先alert出了3、2、1,然后就跳转到了百度。
我们再加一行代码。
var link = document.getElementsByTagName('a')[0];
link.addEventListener('click',function(e){
alert(3);
e.preventDefault();
});
发现,结果就只alert出了3、2、1,并没有像刚才一样跳转到百度。e.preventDefault()这个方法的作用就是阻止元素的默认事件,因为href的链接就没有被触发了。
还有一点需要注意的就是在jquery中使用return false;来阻止事件冒泡时,也是会自动的阻止元素的默认事件的。大家有兴趣的可以自己去写写。
转载文章,请注明出处,http://www.cnblogs.com/olivers/p/5254646.html
探讨Js的事件的冒泡阶段的更多相关文章
- 初始js闭包&事件的冒泡和捕获&EVENT对象
一.初识闭包 function a(){ var n = 0; this.inc = function () { n++; console.log(n); }; } var ...
- JS中的事件冒泡(Bubble)和事件捕获(capture)以及如何阻止事件的冒泡
对“捕获”和“冒泡”这两个概念,通常我们对冒泡了解和使用的会更多一些,因为在我们使用的所有浏览器中,都支持事件冒泡 ,即事件由子元素向祖先元素传播的,就 像气泡从水底向水面上浮一样.而在像firefo ...
- 浅谈js的事件冒泡和事件捕获
本文地址:https://www.cnblogs.com/christineqing/p/7607113.html 前言: 这篇文章起源于上次工作上的原因,在事件上出的bug,所以就抽空写出一篇 ...
- 对于js中事件冒泡的理解分析
一. 事件 事件的三个阶段:事件捕获 -> 事件目标 -> 事件冒泡 捕获阶段:先由文档的根节点document往事件触发对象,从外向内捕获事件对象: 目标阶段:到达目标事件位置(事发地) ...
- JS之事件机制
一.绑定事件的3种方式 1.内联绑定事件 2.on+事件名,绑定事件程序 3.通过addEventListener/removeEventListener绑定事件 不支持ie9之前的浏览器,ie9之前 ...
- JavaScript事件捕获冒泡与捕获
事件流 JavaScript中,事件流指的是DOM事件流. 概念 事件的传播过程即DOM事件流.事件对象在 DOM 中的传播过程,被称为"事件流".举个例子:开电脑这个事,首先你是 ...
- js事件的捕获和冒泡阶段
讨论的主要是两个事件模型:IE事件模型与DOM事件模型 IE内核浏览器的事件模型是冒泡型事件(没有捕获事件过程),事件句柄的触发顺序是从ChildNode到ParentNode. <div id ...
- JS Event事件流(冒泡机制、捕获机制、事件绑定)
1.事件流 事件流:从页面中接收事件的顺序.也就是说当一个事件产生时,这个事件的传播过程,就是事件流. IE的事件流 IE中的事件流叫事件冒泡:事件冒泡:事件开始时由最具体的元素接收,然后逐级向上传播 ...
- js中事件冒泡,事件捕获详解
一.事件流 事件是js与HTML交互的基础,事件流描述的是页面接受事件的顺序,而事件流又分为三个阶段:捕获阶段.目标阶段和冒泡阶段. 如果单纯的事件处理,事件捕获和事件冒泡二选一即可,导致两者并存的原 ...
随机推荐
- ASP.NET中使用UpdatePanel实现局部异步刷新方法和攻略(转)
asp.net UpdatePanel实现异步局部刷新 如有雷同,不胜荣欣,若转载,请注明 鉴于最近项目需要,研究了一下UpdatePanel控件的使用方法,现总结如下,可能有很多地方不足,还望大家斧 ...
- java并发J.U.C AtomicReference VS Volatile
SpinLock实现,摘自并发编程网 package com.juc.simple; import java.util.concurrent.atomic.AtomicReference; /** * ...
- Codeforces 721E Road to Home
题意 输入第一行有4个数,分别为\(L,n,p,t\),分别表示总长度为\(L\)的路,中间有\(n\)个互不相交的区间,现在要用长度为\(p\)的小木棒从左往右铺路(木棒不能被折断,也不能有重叠,且 ...
- 如何在Windows上从源码编译Chromium (CEF3) 加入mp3支持
一.什么是CEF CEF即Chromium Embeded Framework,由谷歌的开源浏览器项目Chromium扩展而来,可方便地嵌入其它程序中以得到浏览器功能. CEF包括CEF1和CEF3两 ...
- ubuntu16.04 install flash
今天安装了一下flash,发现不同版本的Ubuntu复制的位置不同,此处介绍Ubuntu16.04的安装方式 1.首先下载flash,下载tar.gz的 2.解压缩到当前目录 3,打开terminal ...
- web前端面试题汇总
1.doctype作用 <!DOCTYPE>声明位于位于HTML文档中的第一行,处于 <html> 标签之前.告知浏览器的解析器用什么文档标准解析这个文档.DOCTYPE不存在 ...
- 【转贴】Python处理海量数据的实战研究
最近看了July的一些关于Java处理海量数据的问题研究,深有感触,链接:http://blog.csdn.net/v_july_v/article/details/6685962 感谢July ^_ ...
- RequireJS与SeaJS模块化加载示例
web应用越变的庞大,模块化越显得重要,尤其Nodejs的流行,Javascript不限用于浏览器,还用于后台或其他场景时,没有Class,没有 Package的Javascript语言变得难以管理, ...
- can't connect to mysql server on 'localhost'(10061)
在linux下安装Navicat,想说在windows下试一试phpmyadmin之外的mysql图形工具. 显示下载安装了mysql workbench,链接成功.然后又弄了一下输入法重启,想说试一 ...
- Java的书写格式,标识符及命名规则,注释
Java的书写格式,标识符及命名规则,注释 1.Java语言的书写格式(约定成俗) 1) 大括号要对齐(左大括号与句尾对其,后面大括号与句头对齐),并且成对写 2) 左大括号前面有空格 3) 遇到左大 ...