Dom事件流、冒泡、捕获

Dom事件流

dom的结构是一个倒立的树状结构。当一个html元素触发事件时,事件会在dom的根节点和触发事件的元素节点之间传播,中间的节点都会收到该事件。

捕获:div元素触发事件时,事件先从根节点document→html→body→div这个顺序传播。(给这四个节点绑定事件,事件依次触发的顺序);

冒泡:div元素触发事件时,事件从div→body→html→document这个顺序传播。

dom事件流:先捕获,再冒泡。从document开始,到document结束形成一个完整的事件流。

其实工作中用的最多的也就是阻止冒泡和给父元素绑定事件来监听子元素。

阻止冒泡:stopPropagation();IE cancelBubble = true;

阻止默认行为:preventDefault();IE window.event.returnValue = false;

(到这就完事了,也没啥玩意了)

————可————————爱————————分———————————割——————————线———————-——————————————

标准实现方式使用关键词addEventListener。   element.addEventListener(eventType, fn, false),第三个参数false表示冒泡,true表示捕获。

我把这个仁兄的例子拿过来了(原谅我的懒,让我复制粘贴一下),可以看一下效果。http://www.cnblogs.com/qiongmiaoer/p/4566917.html

<!DOCTYPE html>
<html>
<head>
    <meta charset="utf-8">
    <title>bubble event</title>
    <style type="text/css">
        body{margin:0;}
        #one{
            width:500px;
            height:300px;
            background:rgb(255,0,0);
        }
        #two{
            width:400px;
            height:260px;
            background:rgb(255,50,50);
        }
        #three{
            width:300px;
            height:240px;
            background:rgb(255,100,100);
        }
        #four{
            width:200px;
            height:200px;
            background:rgb(255,150,150);
        }
    </style>
</head>
<body>
<div id=‘one‘>
    one
    <div id=‘two‘>
        two
        <div id=‘three‘>
            three
            <div id=‘four‘>
                four
            </div>
        </div>
    </div>
</div>

<script>
    var one = document.getElementById(‘one‘);
    var two = document.getElementById(‘two‘);
    var three = document.getElementById(‘three‘);
    var four = document.getElementById(‘four‘);

    var useCapture = false; //false为冒泡获取【目标元素先触发】    true为捕获获取【父级元素先触发】
    one.addEventListener(‘click‘, function() {
        console.log(‘one‘);
    }, useCapture);
    two.addEventListener(‘click‘, function() {
        console.log(‘two‘);
    }, useCapture);
    three.addEventListener(‘click‘, function() {
        console.log(‘three‘);
    }, useCapture);
    four.addEventListener(‘click‘, function() {
        console.log(‘four‘);
    }, useCapture);
    /*
     false
     冒泡
     点击four div
     输出结果:four three two one

     true
     捕获
     点击four div
     输出结果: one two three four
     */
</script>
</body>
</html>

时间: 2024-07-28 22:32:22

Dom事件流、冒泡、捕获的相关文章

js事件捕获,事件冒泡,事件委托以及DOM事件流

一:DOM事件流: 事件流是从页面接收事件的顺序,DOM2级事件规定事件流包括三个阶段: ①事件捕获阶段:用意在于事件达到目标之前捕获它,在事件捕获阶段事件流模型:document→html→body→div ②处于目标阶段2:实际的目标到事件 ③事件冒泡阶段:由最具体的元素接收到事件,然后向上传播到较为不具体的节点.事件流模型:div →body→ html→ document 二:事件委托 事件委托顾名思义:将事件委托给另外的元素.其实就是利用DOM的事件冒泡原理,将事件绑定到目标元素的父节

DOM事件: DOM事件级别、DOM事件流、DOM事件模型、DOM事件捕获过程、自定义事件

前端面试中只要问到事件,就肯定会有DOM事件:如果回答出来了,就会一直向下延申,其实这些东西都很简单,但我第一次被问到的时候,也是懵的: DOM事件级别: DOM0 element.onclick = function() { } DOM1 一般只有设计规范,没有设计跟事件相关的东西:所以直接跳过 DOM2 element.addEventListener(‘click’, function() { }, false) DOM3 element.addEventLIstener(‘keyup’,

从click事件理解DOM事件流

事件流是用来解释页面上的不同元素接受一个事件的顺序,首先要明确两点: 1.一个事件的影响元素可能不止一个(同心圆理论),但目标元素只有一个. 2.如果这些元素都绑定了相同名称的事件函数,我们怎么知道这些函数的运行顺序?于是有了事件流的概念(事件捕捉,事件冒泡) 举个例子: <div id="outer"> <p id="inner">Click me!</p> </div> 为了看起来方便,先无视CSS样式,那么蓝色的

关于DOM 事件流的三个阶段

一丶 流 什么是流? 比如 react 中的单项数据流,Node.js 中的流,或者本文中的 DOM 事件流,都是流的具体体现.专业地讲,流是程序输入或输出的一个连续的字节序列:通俗地讲,流是有方向的数据. 二丶 事件流 什么是事件流? 假想一下,现在有一组同心圆,你把手指在最里面的圆心上,与此同时,你也正在指着外层的其他同心圆.假设最里面的圆是 DOM 中的一个按钮,那就是说,你点击按钮这个元素的同时,也点击了他的所有父级元素.那么这个点击事件 DOM 要怎么处理呢?事实上,这个点击事件并非只

JavaScript DOM事件流

昨天一天被Amy姐姐讲懵圈了.讲的自信心快没有了,严重怀疑智商.所以今天写一篇相关的基础知识博客,好好补一下.心情有点low,但还是要加油!!!没有人会同情弱者. 历史由来:DOM事件标准定义了两种事件流,这两种事件流有着显著的不同并且可能对你的应用有着相当大的影响.这两种事件流分别是捕获和冒泡.和许多Web技术一 样,在它们成为标准前,Netscape和微软各自不同地实现了它们.Netscape选择实现了捕获事件流,微软则实现了冒泡事件流.幸运的 是,W3C决定组合使用这两种方法,并且大多数新

浅析JavaScript事件流——冒泡

一.什么是事件冒泡流 我们知道事件流指的是从页面中接受事件的顺序. 为了形象理解事件冒泡,可以想象三军主将诸葛亮,在帐内运筹帷幄,眼观六路耳听八方,这时候前方的战事情况就需要靠传令兵来传达,当第一位传令兵接到士官战事信息,打出旗语,百米之外的第二个传令兵看到后打出同样的旗语,第三个,第四个....,直到信息传到诸葛亮手中.用专业术语解释就是:当一个元素上的事件被触发的时候,比如说鼠标点击了一个按钮,同样的事件将会在那个元素的所有祖先元素中被触发.这一过程被称为事件冒泡:这个事件从原始元素开始一直

IE和DOM事件流、普通事件和绑定事件的区别

IE和DOM事件流的区别 IE采用冒泡型事件 Netscape(网络信息浏览器)使用捕获型事件 DOM使用先捕获后冒泡型事件 示例: <body> <div> <button>click</button> </div> </body> 冒泡型事件模型:button->div->body (IE事件流) 捕获型事件模型:body->div->button (Netscape事件流) DOM事件模型:body-&g

事件注册 DOM事件流 事件对象(常用属性,方法) 事件委派(鼠标,键盘事件对象)

注册事件概述 给元素添加事件,称为注册事件或者绑定事件 注册事件有两种方式:传统方式和方法监听注册方式 传统注册方式:利用 on 开头的事件:例如:onclick:注册事件的唯一性,后面的注册事件会把前面的覆盖 方法监听注册方式:addEventListener()IE9+:IE9以前用 attacthEvent()代替:会按照注册顺序依次执行没有唯一性的问题 addEventListener() 事件监听方式 eventTarget.addEventListener(type, listene

[DOM Event Learning] Section 4 事件分发和DOM事件流

[DOM Event Learning] Section 4 事件分发和DOM事件流 事件分发机制: event dispatch mechanism. 事件流(event flow)描述了事件对象在数据结构中是如何传播的. 传播路径 事件对象(event objects)被分发给事件目标(event target),在分发开始的时候,在实现中必须先确定事件对象的传播路径. 这个传播路径必须是一个有序的list,其中包含了事件对象必须通过的事件目标. 对于DOM的实现来说,这个传播路径必须反映这