addEventListener(),封装取消冒泡的函数stopBubble(event)

本文探讨了JavaScript中的冒泡事件和捕获事件,详细解释了事件执行顺序,并提供了封装的停止冒泡函数stopBubble(event)。同时,讨论了阻止默认事件的方法,特别是在a标签的应用场景,以及href="#"和href="javascript:void(0)"的区别。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

1冒泡事件是结构上的向外冒泡
捕获事件是结构上向里捕获

那么冒泡事件和捕获事件谁先执行啊

 var wrapper =document.getElementsByClassName('wrapper')[0];
 var content =document.getElementsByClassName('content')[0];
 var box =document.getElementsByClassName('box')[0];          		  		     					
 wrapper.addEventListener('click',function(){
               console.log('wrapperBubble')//1
           },true)
           content.addEventListener('click',function(){
               console.log('content')//5
           },false)
           content.addEventListener('click',function(){
               console.log('contentBubble')//2
           },true)
           wrapper.addEventListener('click',function(){
               console.log('wrapper')//7
           },false)
           box.addEventListener('click',function(){
               console.log('boxBubble')//3
           },true)

           wrapper.addEventListener('click',function(){
               console.log('wrapper')//8
           },false)
           content.addEventListener('click',function(){
               console.log('content')//6
           },false)
           box.addEventListener('click',function(){
               console.log('box')//4
           },false)

在这里插入图片描述

先捕获后冒泡,而且冒泡的执行顺序是先里后外,与代码行数无关

阻止冒泡事件,w3c标准规则 event.stopPropagation()

  <div class="wrapper">
        </div>
       <script>
            document.onclick=function(){
                console.log('你闲的呀')
            }
           var wrapper =document.getElementsByClassName('wrapper')[0];
           wrapper.onclick=function(){
               this.style.background="green"
           }
       </script>

在这里插入图片描述
如果你打印e 的话,会得出一个mouseEvent的对象,在这个对象里会有一个stopPropagation,以及cancelBubble ,然而其实我没有找到前者

e.stopPropagation(); e.cancelBubble='true'
ie独有的event.cancelBubble = true;但是谷歌也已经实现了

封装取消冒泡的函数stopBubble(event)
          function stopBubble(event){
               if(event.stopPropagation){
                   event.stopPropagation();
               }else{
                   event.cancelBubble=true;
               }
           }
//然后在需要的地方放入stopBubble()
阻止默认事件
document.oncontextmenu=function(event){
      1         return false;//阻止了右键单击默认出菜单事件
         2        event.preventDefault();//ie9一下不兼容
       3        event.returnValue=false;//兼容IE
           }
封装一个默认阻止的函数
			function cancelHandler(event){
               if(event.preventDefault){
                 	  event.preventDefault()
               }else if(event.returnValue){
               		 event.returnValue=false;
               }
           }
a标签的阻止默认事件

<a href="http://www.baidu.com">www.baidu.com</a>
a标签被点击一下会回顶或者刷新页面
这个跳转功能是a标签的 默认事件,我们时常得把a标签的默认事件取消

var a= document.getElementsByTagName('a')[0];
            a.onclick=function(){
                return flase;
            }

也可以这样

   ` <a href="javascript:viod(flase)">demo</a>`

1,viod操作符指定要计算一个表达式但是不返回值 链接这样可以在点击这个链接的时候不触发跳转效果!
另外直接不写href也可以达到不跳转效果!但是因为用到链接a标签一般都需要悬浮小手效果,不写href的时候在一些浏览器里面并不承认a的cursor效果!

href="#"与href="javascript:void(0)"的区别

#包含了一个位置信息,默认的锚是#top 也就是网页的上端。

而javascript:void(0), 仅仅表示一个死链接。

在页面很长的时候会使用 # 来定位页面的具体位置,格式为:# + id。

如果你要定义一个死链接请使用 javascript:void(0) 。

void()仅仅是代表不返回任何值,但是括号内的表达式还是要运行,

例如viod(alter (“aba”))

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值