事件处理模型——事件冒泡、捕获

  1. 事件冒泡(不绑定事件处理函数一样会发生冒泡事件)

    1. 结构上(非视觉上)嵌套关系的元素,会存在事件冒泡的功能,即同一个事件,自子元素冒泡向父元素(自底向上)

      1.             <div class="first" style="width: 300px; height: 300px; background-color: red;">
                        <div class="secend" style="width: 200px; height: 200px; background-color: yellow;">
                            <div class="end" style="width: 100px; height: 100px; background-color: green;"></div>
                        </div>
                    </div>
                <script>
                    var first = document.getElementsByClassName("first")[0];
                    var secend = document.getElementsByClassName("secend")[0];
                    var end = document.getElementsByClassName("end")[0];
                    first.onclick=function(){
                        console.log("123");
                    };
                    secend.onclick=function(){
                        console.log("456");
                    };
                    end.onclick=function(){
                        console.log("789");
                    }
                  </script>  

          我们同时在三个div上绑定了事件,现在三个div存在嵌套的关系,当我们点击最里层的div的时候,就会触发相关的事件冒泡,外边的两个父类div的事件都会被触发,这就是事件冒泡(先触发自己的事件,然后依次向父级)

  2. 事件捕获

    1. 结构上(非视觉上)嵌套关系的元素,会存在事件捕获的功能,即同一个事件,自复父元素捕获至子元素(事件源元素)(自顶向下)

      1.             <div class="first" style="width: 300px; height: 300px; background-color: red;">
                        <div class="secend" style="width: 200px; height: 200px; background-color: yellow;">
                            <div class="end" style="width: 100px; height: 100px; background-color: green;"></div>
                        </div>
                    </div>
                <script>
                    var first = document.getElementsByClassName("first")[0];
                    var secend = document.getElementsByClassName("secend")[0];
                    var end = document.getElementsByClassName("end")[0];
                    first.addEventListener(‘click‘,function(){
                        console.log("123");
                    },true);                //当这个true为false时就不会触发事件捕获,但是会触发事件冒泡
                    secend.addEventListener(‘click‘,function(){
                        console.log("456");
                    },true);
                    end.addEventListener(‘click‘,function(){
                        console.log("789");
                    },true)
                </script>

          我们同时也在三个div上绑定了事件,它们存在嵌套关系,现在我们点击最里边的事件,就会触发捕获事件(先触发被点击的事件的最外层的父级元素的事件,依次向里),这就是事件捕获

  3. 触发顺序:先捕获,后冒泡
  4. focus      blur     change      submit    reset    select  等事件不冒泡
  5. 取消冒泡
    1. W3C标准event.stopPropagation();  但不支持ie9以下版本
    2.             end.onclick=function(e){
                      e.stopPropagation();   //这就会组织冒泡事件的发生    e代表这个是事件的本身
                      console.log("789");
                  }
    3. IE独有event.cancelBubble=true;(这个上边的功能是一样的,写法也是一样的)
  6. 阻止默认事件
    1. 首先我们先说说什么是默认事件

      1. 默认事件——表单提交      a标签跳转        右键菜单
    2. 我们如何来阻止这些默认事件呢?
    3. return false ;以对象属性的方式注册的事件菜生效
      1.             document.oncontextmenu=function(){    //阻止鼠标右键菜单的默认事件
                        console.log("123");
                        return false;
                    }
    4. event.preventDefault();    W3C标准,IE9以下不兼容
      1.             document.oncontextmenu=function(e){
                        console.log("123");
                        e.preventDefault();
                    }
    5. event.returnValue=false;   兼容IE
      1.             document.oncontextmenu=function(e){
                        console.log("123");
                        e.returnValue=false;
                    }
  7. 事件对象
    1. event  ||   window.event  用于IE  
  8. 事件源对象:(虽然我们前边说过事件存在冒泡,但是我们可以通过下边的方法找到我们所触发的事件源对象)

    1. event.target   火狐只有这个
    2. event.srcElement    IE只有这个
    3. 这俩Chrome都有

原文地址:https://www.cnblogs.com/zhuzhu520/p/11966879.html

时间: 2024-10-28 23:49:20

事件处理模型——事件冒泡、捕获的相关文章

JavaScript之jQuery-4 jQuery事件(页面加载后执行、事件处理、事件冒泡、事件对象、模拟操作)

一.jQuery 页面加载后执行 代码执行的时机选择 - $(document).ready()方法和 window.onload事件具有相似的功能,但是在执行时机方面是有区别的 - window.onload 事件是在网页中所有的元素(包括元素的所有关联文件)完全加载到浏览器后才执行 - $(document).ready()方法注册的事件处理程序,在DOM完全加载后就可以调用 - 一般来讲, $(document).ready()的执行要优于window.onload事件 - 需要注意的是,

事件冒泡捕获

<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>Title</title> <script src="traceur.js"></script> <script src="BrowserSystem.js"></script

JavaScript事件:事件处理模型(冒泡、捕获)

(一)事件处理模型---事件冒泡.捕获 (1)事件冒泡 24 <body> 25 <div class="warpper"> 26 <div class="content"> 27 <div class="box"> 28 29 </div> 30 </div> 31 </div> 32 <script type="text/javascript&

这可能是最简明扼要的 js事件冒泡机制+阻止默认事件 讲解了

哎 js事件冒泡机制和阻止冒泡 阻止默认行为好像永远也整不清楚,记了忘 忘了记...醉了 这篇文章写完以后下次再忘记 就呼自己一巴掌,忘一次一巴掌 首先要明白两个概念--事件和事件流 事件指的是用户或浏览器自身执行的某种动作,又称为原始事件模型,例如onclick等 事件流指的是 从页面中接收事件的顺序,也就是说当一个事件产生时,这个事件的传播过程就叫做事件流. 事件冒泡: 从事件目标开始 一级级向上冒泡,到document为止--从里到外 IE 5:div--body--document; I

整理之DOM事件阶段、冒泡与捕获、事件委托、ie事件和dom模型事件、鼠标事件

整理之DOM事件阶段 本文主要解决的问题: 事件流 DOM事件流的三个阶段 先理解流的概念 在现今的JavaScript中随处可见.比如说React中的单向数据流,Node中的流,又或是今天本文所讲的DOM事件流.都是流的一种生动体现.用术语说流是对输入输出设备的抽象.以程序的角度说,流是具有方向的数据. 事件流分事件冒泡与事件捕获 在浏览器发展的过程中,开发团队遇到了一个问题.那就是页面中的哪一部分拥有特定的事件? 可以想象画在一张纸上的一组同心圆,如果你把手指放在圆心上,那么你的手指指向的其

js之事件冒泡和事件捕获详细介绍

(1)冒泡型事件:事件按照从最特定的事件目标到最不特定的事件目标(document对象)的顺序触发. IE 5.5: div -> body -> document IE 6.0: div -> body -> html -> document Mozilla 1.0: div -> body -> html -> document -> window (2)捕获型事件(event capturing):事件从最不精确的对象(document 对象)开

js 事件冒泡和事件捕获

(1)冒泡型事件:事件按照从最特定的事件目标到最不特定的事件目标(document对象)的顺序触发. IE 5.5: div -> body -> document IE 6.0: div -> body -> html -> document Mozilla 1.0: div -> body -> html -> document -> window (2)捕获型事件(event capturing):事件从最不精确的对象(document 对象)开

看懂此文,不再困惑于javascript中的事件绑定、事件冒泡、事件捕获和事件执行顺序

最近一个项目基于3维skyline平台,进行javascript二次开发.对skyline事件的设计真是无语至极,不堪折磨啊!抽空学习了下javascript和jquery的事件设计,收获颇大,总结此贴,和大家分享. (一)事件绑定的几种方式 javascript给DOM绑定事件处理函数总的来说有2种方式:在html文档中绑定.在js代码中绑定.下面的方式1.方式2属于在html中绑定事件,方式3.方式4和方式5属于在js代码中绑定事件,其中方法5是最推荐的做法. 方式1: HTML的DOM元素

javascript中的事件冒泡、事件捕获和事件执行顺序

谈起JavaScript的 事件,事件冒泡.事件捕获.阻止默认事件这三个话题,无论是面试还是在平时的工作中,都很难避免. DOM事件标准定义了两种事件流,这两种事件流有着显著的不同并且可能对你的应用有着相当大的影响.这两种事件流分别是捕获和冒泡.和许多Web技术一样,在它们成为标准之前,Netscape和微软各自不同地实现了它们.Netscape选择实现了捕获事件流,微软则实现了冒泡事件流.幸运的是,W3C决定组合使用这两种方法,并且大多数新浏览器都遵循这两种事件流方式. 1事件传播--冒泡与捕