js event事件

<html>

<head>
    <title>event事件</title>
    <meta charset="utf-8">
    <style>
      
    </style>
</head>

<body>
        <h2>事件监听 事件冒泡 事件代理</h2>
        <p>事件代理 就是对于瀑布流样式的结构 不好监控里面的事件 就监听外面的事件</p>
  <div id="div1">
      <p id="p1">激活</p>
      <p id="p2">取消</p>
      <p id="p3">取消</p>
      <p id="p4">取消</p>
  </div>
  <div id="div2">
        <p id="p5">取消</p>
        <p id="p6">取消</p>        
    </div>

    <div id="div3">
            <a href="#">a1</a>    
            <a href="#">a2</a>    
            <a href="#">a3</a>    
            <button id="btn2">加载更多</button>
        </div>
   
</body>

</html>
<script src="../js/jquery.min.js"></script>
<script>
    //写一个公共的监听事假 addEventListen
    /*  function fnAddEnevt(elem,type,fn){  //不通用
         elem.addEventListener(type,fn)
     } */

     //通用的 兼容普通和代理 事件
     function fnAddEnevt(elem,type,seletor,fn){
         if(seletor==null){
             fn=seletor;
             seletor=null;
         }
         elem.addEventListener(type,event=>{
             const target=event.target;
             if(seletor){
                 if(target.math(seletor)){
                     fn.call(target,event)
                 }

             }else{
                fn.call(target,event)
             }
         })
     }


     // 普通绑定
const btn1 = document.getElementById('btn1')
fnAddEnevt(btn1, 'click', function (event) {
    // console.log(event.target) // 获取触发的元素
    event.preventDefault() // 阻止默认行为
    alert(this.innerHTML)
})

// 代理绑定
const div3 = document.getElementById('div3')
fnAddEnevt(div3, 'click', 'a', function (event) {
    event.preventDefault()
    alert(this.innerHTML)
})



     const p1=document.getElementById("p1")
     fnAddEnevt(p1,"click",function(e){
         console.log("p1 click")
       //  e.preventDefault();//阻止默认行为 比如a标签跳转
       e.stopPropagation()//阻止冒泡
         
     })

     //冒泡 从一个触发点 一直外父级扩撒

     const p2=document.getElementById("p2")
     fnAddEnevt(p2,"click",event=>{
         console.log(event.target) //目标对象
     
     })

     const body=document.body
     fnAddEnevt(body,"click",event=>{
         console.log(event.target) //目标对象
         console.log("body 取消")
     
     })


     //事件代理 div3中a 标签的点击事件不好监控的时候 就监控div3
     const div3=document.getElementById("div3")
     fnAddEnevt(div3,"click",function(e){
         e.preventDefault();//阻止默认行为
         console.log(e.target.nodeName)
         if(e.target.nodeName=='A'){//是a标签
          
          alert(e.target.innerHTML)
         }

     })



</script>

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值