zoukankan      html  css  js  c++  java
  • 浅谈javascript中事件冒泡与事件捕获

    事件冒泡:一个事件会顺着他的层级一直往上传,一直传到document上为止,即从盒模型上看是从内到外的过程。

    例:

    <!DOCTYPE html>
    <html lang="en" onclick="alert('html')">
    <head>
    <meta charset="UTF-8">
    <title>事件流</title>
    <style type="text/css">
    div{
    padding: 100px;
    }
    </style>
    </head>
    <body onclick="alert('body')">
    <div style="background: #ccc" onclick="alert(this.style.background)">
    <div style="background: green" onclick="alert(this.style.background)">
    <div style="background: red" onclick="alert(this.style.background)"></div>
    </div>
    </div>
    </body>
    </html>

    仅点击了中间的红色部分,按顺序出现如下:

    事件冒泡从最中间的红色div开始,一级一级往上。若直接点击灰色部分,会从出现提示灰色提示框开始一直到提示html框。

    取消事件冒泡:event.cancelBubble=true

    例:

    <!DOCTYPE html>
    <html lang="en">
    <head>
    <meta charset="UTF-8">
    <title>事件冒泡实例</title>
    <style type="text/css">
    #div1{
    400px;
    height: 500px;
    background-color: #ccc;
    display: none;
    }
    </style>
    </head>
    <body>
    <input id="btn" type="button" value="显示"></input>
    <div id="div1"></div>
    <script type="text/javascript">
    var oBtn=document.getElementById('btn');
    var oDiv=document.getElementById('div1');

    oBtn.onclick=function(ev){
    var oEvent=ev||event; //未加之前 事件会冒泡到document上,div会一闪而过
    oDiv.style.display='block';
    oEvent.cancelBubble=true;
    }
    document.onclick=function(){
    oDiv.style.display='none';
    }
    </script>
    </body>
    </html>

    如果没有取消事件冒泡,点击按钮不会出现任何反应,其实并非没有反应,而是div一闪而过,点击之后div的disblock变为block,但是事件立即冒泡到document上,div的display又被改为none。

    事件捕获:obj.setCapture  

    将网页中所有的事件都集中于一个点,相当于是将所有页面上的事件集中于当前点击触发的事件。从盒模型上来看是从外到内的。

    ( 可用于IE 解决有文字的情况下文 字或其他东西不被选中) 注:在div松开之后obj.releaseCapture();解开锁定的事件

    例:

    <!DOCTYPE html>
    <html lang="en">
    <head>
    <meta charset="UTF-8">
    <title>事件捕获</title>
    <!-- 点击任意位置都可弹出a -->
    </head>
    <body>
    <input id="btn" type="button" value="an"></input>
    <script type="text/javascript">
    window.onload=function(){
    var oBtn=document.getElementById('btn');
    oBtn.onclick=function(){
    alert('a');
    }
    oBtn.setCapture();
    }
    </script>
    </body>
    </html>

    在IE下可看到无论点击什么地方,全部弹出a。

  • 相关阅读:
    [对对子队]会议记录5.27(Scrum Meeting12)
    [对对子队]会议记录5.25(Scrum Meeting11)
    [对对子队]会议记录5.24(Scrum Meeting10)
    [对对子队]会议记录5.22(Scrum Meeting9)
    [对对子队]会议记录5.21(Scrum Meeting8)
    [对对子队]会议记录5.20(Scrum Meeting7)
    团队作业第六次——Beta冲刺日志集合
    团队作业第六次——Beta冲刺日志集合
    团队作业第五次——敏捷冲刺日志集合
    Beta冲刺答辩
  • 原文地址:https://www.cnblogs.com/huixinyudeboke/p/5679516.html
Copyright © 2011-2022 走看看