事件流,冒泡,捕获,事件委托

js里怎么去监听一个事件?

  网页中每一个元素都有可以产生某些触发JavaScript函数的事件,事件是可以被JavaScript侦测到的一种行为

监听方法的参数分别代表什么意思?其中哪些参数关系到js的事件流机制?js事件流机制有哪些工作?工作原理是什么?

  第一个参数是,事件类型,例如onclick

  第二个参数是,响应的时候所执行的函数

  第三个是事件流问题,侦听的三个阶段,捕获阶段 --- 目标阶段 --- 冒泡阶段

  此处的参数确定侦听器是运行于捕获,目标还是冒泡

  如果将useCapture设置为true,则侦听器只在捕获阶段处理事件,如果设置为false,侦听器就只在目标或者冒泡阶段处理事件

  如果想要三个阶段都有侦听事件,请调用两次addEventListener,一次为true,一次为false

  true的顺序总在false之前,如果多个为true,则外层触发多于内层,如多多个为false,则内层触发先于外层

  冒泡:事件从里向外发生(目前IE6,7,8只支持冒泡流)

  捕获:事件从外向里
  false,阻止事件继续往下流

myBody.addEventListener("click", function() {
     show(‘body<br>‘);
}, true); //若为false则是冒泡事件

事件移除

  removeEventListener(type, fn, useCapture)

  因为IE678只支持事件冒泡,不支持事件捕获,所以它也不支持addEventListener( )方法,

  IE提供了另一个函数attachEvent( type , fn )

  参数:type---------事件类型,fn-------------事件处理函数,没有第三个参数

  事件移除detachEvent( type , fn )

var Event=ev||window.event;
if (Event.stopPropagation){
    Event.stopPropagation();//非IE阻止事件传播
}else{
    Event.cancelBubble=true;//IE阻止事件冒泡
}
var Event=ev||event;
if (Event.preventDefault) {
    Event.preventDefault(); //非IE阻止默认事件
} else{
    Event.returnValue=false; //IE阻止默认事件
};

事件委托

  定义:利用事件冒泡,只指定一个事件处理程序

   好处:1、节省空间内存性能好,2、对于新增的内容,无需再进行事件绑定,对于动态内容尤为合适

   缺点:如果把所有事件都用事件代理,可能会出现事件误判。即本不该被触发的事件被绑定上了事件。

<body>
    <div id="box">
        <button val="add">添加</button>
        <button val="del">删除</button>
        <button val="select">选择</button>
    </div>
</body>
<script>
    var box=document.getElementById("box");
    box.onclick=function (ev) {
        var ev=ev||window.event;
        var target=ev.target||ev.srcElement;
        if (target.nodeName.toLocaleLowerCase()==‘button‘){
            var attVal=target.getAttribute(‘val‘);
            switch(attVal){
                case‘add‘:console.log(‘添加‘);break;
                case‘del‘:console.log(‘删除‘);break;
                case‘select‘:console.log(‘选择‘);break;
            }

        }
    }
</script>

原文地址:https://www.cnblogs.com/xiaohaha668/p/10700811.html

时间: 2024-07-29 01:29:28

事件流,冒泡,捕获,事件委托的相关文章

浅析JavaScript事件流——冒泡

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

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

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

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

position布局影响点击事件以及冒泡获取事件目标

在编写功能时总是会出现很多意想不到的问题,现在就讲讲我遇到的两个问题,通过举一个相似的例子来解说. <1> 元素互相独立,不存在包含于被包含 选择城市的按钮,为它绑定点击事件,点击后就弹出城市列表层,城市列表层设置了position与z-index的值来进行布局,然后再点击选择城市按钮,点击事件就不起作用了,反而是城市列表层的点击事件起作用,这说明只有显示在最上面的一层绑定的事件可以起作用,即使最上面的一层没有全部盖住下面的内容,下面的内容绑定的事件也不起作用,所以要想让选择城市按钮绑定的点击

事件对象、事件流、关于冒泡、默认行为

事件对象: 在触发事件的时候,会产生一个事件对象event,这个对象中包含了与事件相关的信息. 例如:在触发鼠标双击时,是触发了这几件事  onkeydown+onkeyup+onclick+onkeydown+onkeyup+onclick 事件流: 当HTML元素产生一个事件时,这个事件会在元素节点与根节点之后的路径传播,路径所经过的节点都会接收到这个事件,这个传播过程称为DOM事件流. DOM事件流分为冒泡事件流和捕获事件流. 事件冒泡: 当一个元素的事件被触发时,同样的事件将会在该元素的

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

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

js事件流机制冒泡和捕获

JavaScript与HTML之间的交互是通过事件实现的.事件,就是文档或浏览器窗口中发生的一些特定的交互瞬间. 事件流 从页面中接收事件的顺序称为事件流. IE --> 事件冒泡流 Netscape --> 事件捕获流 查看源码:DOM2事件-捕获-冒泡 事件冒泡 IE的事件流叫做事件冒泡(event bubbling),即事件开始时由最具体的元素(文档中嵌套层次最深的那个节点)接收,然后逐级向上传播到较为不具体的节点(文档). 我们先来个简单的例子,这是HTML结构 <!DOCTYP

JS之捕获冒泡和事件委托

一.事件流(捕获,冒泡) 事件流:指从页面中接收事件的顺序,有冒泡流和捕获流. 当页面中发生某种事件(比如鼠标点击,鼠标滑过等)时,毫无疑问子元素和父元素都会接收到该事件,可具体顺序是怎样的呢?冒泡和捕获则描述了两种不同的顺序. DOM2级事件规定事件流包括三个阶段,如图: 假如我们点击一个div, 实际上是先点击document,然后点击事件传递到div,而且并不会在这个div就停下,div有子元素就还会向下传递,最后又会冒泡传递回document,如上图 为了兼容更多的浏览器,非特殊情况一般

事件流,事件捕获与事件冒泡-基础知识总结------彭记(018)

事件流: -事件流包括三个阶段-事件捕获阶段.处于目标阶段和事件冒泡阶段. -首先发生的是事件捕获,为截获事件提供了机会,然后是实际的目标接收到事件,最后一个阶段是冒泡阶段,可以在这个阶段对事件做出响应. 事件冒泡: -事件开始时由最具体的元素接收,然后逐级向上传播到较为不具体的节点(文档). <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8">

关于事件流,事件冒泡和事件捕获

1.事件流 假设有这样一个场景: 有一个导航条:div > ul > li > a,每个元素块宽高一样,就像是一组同心圆.如果我们点击a元素,那么浏览器会认为单击事件不仅仅发生在a上.换句话说,在我们单击a元素的同事,我们也单击了容器中的其他元素. 事件流描述的是从页面中接收事件的顺序.但有意思的是,IE 和 Netscape 却分别提出了不一样的事件流概念.IE 的事件流是事件冒泡,而Netscape的事件流是事件捕获流. 那么问题来了,什么是事件冒泡?什么是事件捕获? 2.事件冒泡