JS阻止默认事件和阻止冒泡事件

JS阻止默认事件和阻止冒泡事件

什么是事件冒泡呢?

事件发生后从内到外或者从外到内的传播
因为事件源本身(可能)并没有处理事件的能力,或处理事件的函数并未绑定在该事件源上所以会发生传播

事件冒泡会经常影响事件委托机制

<!DOCTYPE html>
<html lang="en">

<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
</head>

<body>
    <div id="info">
        <div class="box-1" onclick="box1()">
            最外层
            <div class="box-2" onclick="box2()">
                第二层
                <div class="box-3" onclick="box3()">
                    第三层
                    <div class="box-4" onclick="bubbles()">最底</div>
                </div>
            </div>
        </div>
    </div>
    <script>
        function bubbles() {
            console.log("box-4")
        }

        function box1() {
            console.log("box-1");
        }

        function box2() {
            console.log("box-2");
        }

        function box3() {
            console.log("box-3");
        }
    </script>
</body>

</html>

那么如何阻止事件冒泡!

我们只点击了最里面的那个div,但是在他的父级及以上div身上所绑定的事件都被触发了,这显然不是我们想要的结果,我们实际需求是只想要触发点击的那个div上绑定的事件

我们只需要添加stopPropagation();

这样我们就可以实现点击哪个div触发哪个div的方法,而对其他div不造成影响了

如何阻止默认事件呢

一共有如下三种方式

//谷歌及IE8以上
e.preventDefault();
//IE8及以下
window.event.returnValue = false;
//无兼容问题(但不能用于节点直接onclick绑定函数)
return false;

具体使用代码段如下

<!doctype html>
<html lang="en">
<head>
  <meta charset="UTF-8">
  <meta name="viewport" content="width=device-width, user-scalable=no, initial-scale=1.0, maximum-scale=1.0, minimum-scale=1.0">
  <meta http-equiv="X-UA-Compatible" content="ie=edge">
  <title>阻止默认事件</title>
</head>
<body>
<div id="info">
  <a href="www.baidu.com" id="test">阻止默认事件</a>
</div>
<script>
  var aDom = document.getElementById('test');
  aDom.onclick = function ( e ){
    if(e && e.preventDefault) {
      //非IE浏览器
      e.preventDefault();
    } else {
      //IE浏览器(IE11以下)
      window.event.returnValue = false;
    }
    //return false;   //或者不写上面的判断直接写这句
  };
</script>
</body>
</html>
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值