事件的传播

**事件的传播**
	<div  class="box01>
			<div  class="box02>
						<div  class="box03></div>
			</div>
	</div>
		当.box01,.box02,.box03,都添加了相同的事件,并且是包含关系,
	关于事件传播网景公司和微软公司有不同的理解;
微软公司认为事件其实应该从内向外传播,也就是事件触发时,应当先触发当前元素上的事件然后在向当前元素的祖先传播,也就是说事件应该在冒泡阶段执行,
网景公司认为事件应该是从外向内传播,也就是当事件触发时,应该先触发当前元素的最外层的祖先元素的事件,然后在向内传播给后代元素;

最终,w3c综合了两个公司的方案,将事件传播分成了三个阶段,
1,捕获阶段
在捕获阶段时,从最外层的祖先元素向目标元素进行事件的捕获,但是此时并不会触发事件,
2,目标阶段
事件捕获到目标元素;
3,冒泡阶段
事件从目标元素向他的祖先元素传递,依次触发祖先元素上的事件;


这种分歧在日常生活中也很常见,举个例子,某个地方出了抢劫事件,我们有多种处理方式

村里先发现,报告给乡里,乡里报告到县城,县城报告给市里。。。。
市里先知道这事儿,然后交代给县城怎么处理,县城交给到乡里处理,乡里交给村里处理
在这里插入图片描述
其实绝大多数情况下我们只是想触发目标元素的事件,并不想触发祖先元素的事件,所以我们必须要阻止游览器的默认冒泡,

1.event.stopPropagation()方法

这是阻止事件的冒泡方法,不让事件向documen上蔓延,但是默认事件任然会执行,当你掉用这个方法的时候,如果点击一个连接,这个连接仍然会被打开,

2.event.preventDefault()方法

这是阻止默认事件的方法,调用此方法是,连接不会被打开,但是会发生冒泡,冒泡会传递到上一层的父元素;

3.return false ;

这个方法比较暴力,他会同事阻止事件冒泡也会阻止默认事件;写上此代码,连接不会被打开,事件也不会传递到上一层的父元素;可以理解为return false就等于同时调用了event.stopPropagation()和event.preventDefault()

  • 3
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值