事件冒泡、阻止事件冒泡

事件冒泡

当事件发生后,这个事件就要开始传播(从里到外直到window或者从外向里)。事件源本身(可能)并没有处理事件的能力,即处理事件的函数(方法)并未绑定在该事件源上。

注意 ==这里传递的仅仅是事件并不传递所绑定的事件函数。所以如果父级没有绑定事件函数,即使事件确实传递了,也不会做出表现。==

<html>
<head>

<style type="text/css">
div.one
{
border-style: solid;
border-color: #0000ff
}
div.two
{
border-style: solid;
border-color: #ff0000 #0000ff
}
</style>

</head>

<body>

<div class="one" id="div1"> 
    <div class="two" id="div2" href="http://www.baidu.com">
        儿子儿子儿子
    </div> 
    
    父亲父亲父亲
</div>

<script>
var div1 = document.getElementById("div1");
var div2 = document.getElementById("div2");

div2.onclick = function(){alert("这是儿子事件");}; 
div1.onclick = function(){alert("这是父亲事件");};
</script>
</body>
</html>

上面例子是非常典型的冒泡事件表现,点击div2,事件也将传递给div1(div2的父节点)。

显然这个特性有时也并不是我们所需要的,所以有对应的阻止冒泡的方法。

事件有个stopPropagation方法,只要调用该方法,事件将停止冒泡。在上例中给div2响应函数里调用可实现阻止。


div2.onclick = function(ev){
    alert("这是儿子事件"); 
    
    if ( e && e.stopPropagation )
      e.stopPropagation();
    else //IE取消事件冒泡的特殊处理
      window.event.cancelBubble = true;
}; 

注意 IE浏览器较为特殊,调用cancelBubble = true来实现。

总结

https://www.cnblogs.com/julin-peng/p/3991522.html

1. event.stopPropagation()

事件处理过程中,阻止了事件冒泡,但不会阻击默认行为(它就执行了超链接的跳转)

2. return false

事件处理过程中,阻止了事件冒泡,也阻止了默认行为(比如刚才它就没有执行超链接的跳转)

3. event.preventDefault()

事件处理过程中,不阻击事件冒泡,但阻击默认行为(它只执行所有弹框,却没有执行超链接跳转)

©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 关于js事件冒泡、阻止事件冒泡 一、事件冒泡 当事件发生后,这个事件就要开始传播(从里到外或者从外向里)。为什...
    懿左左阅读 890评论 0 13
  • 以下文章为转载,对理解JavaScript中的事件处理机制很有帮助,浅显易懂,特分享于此。 什么是事件? 事件(E...
    jxyjxy阅读 3,086评论 1 10
  •   JavaScript 与 HTML 之间的交互是通过事件实现的。   事件,就是文档或浏览器窗口中发生的一些特...
    霜天晓阅读 3,581评论 1 11
  • 以前听老师讲解事件冒泡和事件捕获机制的时候跟听天书一样,只依稀记得IE使用的是事件冒泡,其他浏览器则是事件捕获。当...
    web蜗牛阅读 2,651评论 0 1
  • 本篇博客源地址 总结: 鼠标事件 1.click与dbclick事件ele.click()ele.click(ha...
    ZombieBrandg阅读 709评论 0 1