JavaScript中的事件冒泡机制
事件冒泡机制
事件冒泡发生的条件:当为多个嵌套的元素设置了相同的事件处理程序,它们将触发事件冒泡机制。在事件冒泡中,最内部的元素将首先触发其事件,然后是栈内的下一个元素触发该事件,以此类推,直到到达最外面的元素。如果把事件处理程序指定给所有的元素,那么这些事件将依次触发。
举个例子:
<!doctype html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>事件冒泡</title>
<script src="demo2.js"></script>
</head>
<body>
<div id = "first" style="padding : 20px;background-color: #ff0;width: 150px;">
<div id="second" style="background-color :#f00;width:100px;height:100px;border :1px dashed #000"></div>
</div>
</body>
</html>
//demo2.js
window.onload = setupEvents; function setupEvents(){
document.getElementById("first").onmousedown=function(){
alert("first element event");
} document.getElementById("second").onmousedown=function(){
alert("second element event");
} document.onmousedown=function(){
alert("document event");
}
}
如果单击最里面的div元素,不论在什么浏览器中将弹出三个警告窗口,依次显示:
1.Second element event
2.First element event
3.Document event

取消事件冒泡机制
如果你有一个元素堆栈,且只希望一个元素触发该事件处理程序,可以取消事件冒泡机制。IE中的属性:cancelBubble,Mozila中的属性:stopPropagation。代码如下:
function stopEvent(evnt){
if(evnt.stopPropagation){
evnt.stopPropagation();
}else{
evnt.cancelBubble = ture;
}
}
现在修改demo2.js中的first id的js代码:
//demo2.js
window.onload = setupEvents; function setupEvents(){
// document.getElementById("first").onmousedown=function(){
// alert("first element event");
// }
//
document.getElementById("first").onmousedown=function(evnt){
var theEvent = evnt ? evnt :window.event;
alert("first element event");
stopEvent(theEvent);
} document.getElementById("second").onmousedown=function(){
alert("second element event");
} document.onmousedown=function(){
alert("document event");
}
} function stopEvent(evnt){
if(evnt.stopPropagation){
evnt.stopPropagation();
}else{
evnt.cancelBubble = ture;
}
}
然后试验,你会发现最后一个针对文档事件处理程序的警告窗口将不会影响,因为在时间到达栈顶之前,事件已经取消了。
JavaScript中的事件冒泡机制的更多相关文章
- JavaScript中的事件循环机制跟函数柯里化
一.事件循环机制的理解 test();//按秒输出5个5 function test() { for (var i = 0; i < 5; i++) { setTimeout(() => ...
- javascript中的事件冒泡、事件捕获和事件执行顺序
谈起JavaScript的 事件,事件冒泡.事件捕获.阻止默认事件这三个话题,无论是面试还是在平时的工作中,都很难避免. DOM事件标准定义了两种事件流,这两种事件流有着显著的不同并且可能对你的应用有 ...
- JavaScript中的事件委托机制跟深浅拷贝
今天聊下JavaScript中的事件委托跟深浅拷贝 事件委托 首先呢,介绍一下事件绑定 //方法一:通过onclick <button onclick="clickEvent()&qu ...
- Javascript中的事件冒泡与捕获
事件冒泡和事件捕获 起因:今天在封装一个bind函数的时候,发现el.addEventListener函数支持第三个参数,useCapture:是否使用事件捕获,觉得有点模糊 Js事件流 页面的哪一部 ...
- JavaScript中的事件冒泡?事件传播的解释
注:本文来源 可译网 事件冒泡是你在学习javaScript旅途中遇到的一个术语,它涉及到当一个元素被另一个元素嵌套时调用事件处理的顺序,并且两个元素注册了同一个事件(例如,点击事件). 但是事件冒 ...
- javascript中的事件冒泡和事件捕获
1.事件冒泡 IE 的事件流叫做事件冒泡(event bubbling),即事件开始时由最具体的元素(文档中嵌套层次最深的那个节点)接收,然后逐级向上传播到较为不具体的节点(文档).以下面的HTML ...
- JavaScript 进阶教程一 JavaScript 中的事件流 - 事件冒泡和事件捕获
先看下面的示例代码: <html xmlns="http://www.w3.org/1999/xhtml"> <head> <title>Jav ...
- 解析Javascript事件冒泡机制
本资源引自: 解析Javascript事件冒泡机制 - 我的程序人生 - 博客频道 - CSDN.NET http://blog.csdn.net/luanlouis/article/details/ ...
- javascript 中的事件机制
1.javascript中的事件. 事件流 javascript中的事件是以一种流的形式存在的. 一个事件会也有多个元素同时响应. 有时候这不是我们想要的效果, 我们只是需要某个特定的元素相应我们的绑 ...
随机推荐
- Linux 学习guideline
记得在中国人气和高手最多的linuxform上看到的一句话. 现在自己的书架上以后lkd2+ldd3+情景分析,再加上它ulk3,书架的linux kernel的四库全书已经凑齐,很充实. lkd2: ...
- 老韩思考:一个卖豆腐的能转行IT吗? 你的卖点在哪里?
前言: 我带过的学生很多,各行各业都有,泰牛程序员招生消息放出去后,还有一个在菜市场上卖豆腐的也看我的视频教程,决定转换IT行业,我想,北大毕业的可以卖猪肉,那么卖豆腐的为什么就不能从事IT行业呢?那 ...
- iOS开发--使用NSMutableAttributedString 实现富文本
在iOS开发中,常常会有一段文字显示不同的颜色和字体,或者给某几个文字加删除线或下划线的需求.之前在网上找了一些资料,有的是重绘UILabel的textLayer,有的是用html5实现的,都比较麻烦 ...
- Java多线程4:synchronized关键字
原文:http://www.cnblogs.com/skywang12345/p/3479202.html 1. synchronized原理在java中,每一个对象有且仅有一个同步锁.这也意味着,同 ...
- DAO设计模式 -- 使用数据库连接类连接MySql数据库并实现添加用户
1. DAO简介 DAO设计模式是属于J2EE数据库层的操作,使用DAO设计模式可以简化大量代码,增强程序的可移植性. 2. DAO各部分详解 DAO设计模式包括5个重要的部分,分别为数据 ...
- Filter过滤非法字符
示例:定义一个Filter,用于用户发言中出现的“晕”字,即如果没有这个字则允许发言,如果有这个字则不允许发言并提示错误. CharForm.jsp <%@ page language=&quo ...
- DNSget Ip
var address = Dns.GetHostEntry(Dns.GetHostName()).AddressList.FirstOrDefault(a => a.AddressFamily ...
- 打开一个已经写好的Android studio工程的方法
- 对List顺序,逆序,随机排列实例代码
ackage Test; import java.util.Collections; import java.util.LinkedList; import java.util.List; p ...
- Spring 使用注解方式进行事务管理
转载:http://www.cnblogs.com/younggun/archive/2013/07/16/3193800.html 使用步骤: 步骤一.在spring配置文件中引入<tx:&g ...