事件冒泡的疑问

<div class="a">
  <div class="b">
      2222
      <div class="c">3333</div>
  </div>
</div>


  <script type="text/javascript">
        $('.a').on('click','.c',function(e){
            e.stopPropagation();
            alert('c');
        })
        $('.a').on('click',function(){
           alert('a')
        })
    
        $('.a').on('click','.b',function(){
          alert('b')
        })

</script>

利用事件委托,将所有的事件都冒泡到.a处理,但是,如果.c阻止了冒泡,事件无法冒泡到.a被处理,c怎么会被弹出?

阅读 2.1k
3 个回答

c阻止了冒泡,所以a,b不会弹出,但是c本身是可以弹出的,没毛病啊。如果c没有阻止冒泡,则a,b,c都会弹出。

c是在事件捕获阶段弹出的。
事件的过程是:

先经过事件捕获阶段,即从document->html->body->div的顺序,然后是处于目标阶段,之后才是事件冒泡阶段,从最下面冒泡到最高层的dom。
你只阻止了事件冒泡,没有阻止事件捕获。

通俗说一下,冒泡从内往外冒, c被阻止,就不能再往外了。你第一段on写的就是在c处 阻止冒泡。

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题