zoukankan      html  css  js  c++  java
  • js中事件冒泡及阻止

    1.事件冒泡和阻止

    <!DOCTYPE html>
    <html lang="en">
    <head>
      <meta charset="UTF-8">
      <title>title</title>
    
    </head>
    
    <script >
    	function  my$(id){
    	return document.getElementById(id);
    }
    	//设置任意元素的中间的文本内容
    function setInnnerText(element,text) {
        if(typeof element.textContent=="undefined"){
            element.innerText=text;
        }else{
            element.textContent=text;
        }
    }
    	
    </script>
    <body>
    <input type="button" value="创建一个p" id="btn"/>
    哈哈哈
    <input type="button" value="创建二个p" id="btn2"/>
    <div id='dv'> </div>
    
    <div id="dv1" style="500px ;height: 500px;background: red;">
    	
    	<div id="dv2" style="400px ;height: 400px;background: green;">
    		
    		<div id="dv3" style="300px ;height: 300px;background: orchid;"> </div>
    	</div>
    </div>
    
    
    <script>
    //
    
    //多个 元素冒泡多个事件有嵌套的关系;
    	
    	//div1 和div2和div3点击事件都会发生
    	my$("dv1").onclick=function () {
        console.log(this.id);
      };
      my$("dv2").onclick=function () {
        console.log(this.id);
        //阻止事件冒泡
        window.event.cancelBubble=true;
      };
      //事件处理参数对象
      my$("dv3").onclick=function () {
        console.log(this.id);
        //阻止事件冒泡IE支持
        //e.stopPropagation();
    
        //console.log(e);
      };
     document.body.onclick=function () {
         console.log("颤抖吧,你们这些愚蠢的标签");
     };
     //事件冒泡从里到外
     
    </script>
    </body>
    </html>
    

    说明:

    //事件有三个阶段:
    /*
    *
    * 1.事件捕获阶段 :从外向内
    * 2.事件目标阶段 :最开始选择的那个
    * 3.事件冒泡阶段 : 从里向外
    *
    * 为元素绑定事件
    * addEventListener("没有on的事件类型",事件处理函数,控制事件阶段的)
    * 事件触发的过程中,可能会出现事件冒泡的效果,为了阻止事件冒泡--->
    * window.event.cancelBubble=true;谷歌,IE8支持,火狐不支持
    * window.event就是一个对象,是IE中的标准
    * e.stopPropagation();阻止事件冒泡---->谷歌和火狐支持
    * window.event和e都是事件参数对象,一个是IE的标准,一个是火狐的标准
    * 事件参数e在IE8的浏览器中是不存在,此时用window.event来代替
    * addEventListener中第三个参数是控制事件阶段的
    * 事件的阶段有三个:
    * 通过e.eventPhase这个属性可以知道当前的事件是什么阶段的
    * 如果这个属性的值是:
    * 1---->捕获阶段
    * 2---->目标阶段
    * 3---->冒泡
    * 一般默认都是冒泡阶段,很少用捕获阶段
    * 冒泡阶段:从里向外
    * 捕获阶段:从外向内
    * */

    2事件的阶段

    var objs=[my$("dv3"),my$("dv2"),my$("dv1")];
     //遍历注册事件
       objs.forEach(function (ele) {
        //为每个元素绑定事件
        ele.addEventListener("click", function (e) {
          console.log(this.id+"====>"+e.eventPhase);
    
        }, true);
    
      });
    

      

  • 相关阅读:
    [Effective Java读书笔记] 第二章 创建和销毁对象(1~7)
    [Guava官方文档翻译] 5. Guava的Object公共方法 (Common Object Utilities Explained)
    [Guava官方文档翻译] 4. 使用Guava Ordering排序 (Ordering Explained)
    iOS正则表达式
    ios UIKit动力
    iOS8 UISearchViewController搜索功能讲解
    APP被苹果APPStore拒绝的各种原因
    iOS tableViewCell plane格式下,接近section边缘不显示分割线却被复用解决办法
    企业证书APP发布流程
    iOS越狱包
  • 原文地址:https://www.cnblogs.com/liushisaonian/p/9368713.html
Copyright © 2011-2022 走看看