javascript事件冒泡,事件捕获和事件委托详解

 更新时间:2021年11月10日 08:40:04   作者:Patty_2000  
这篇文章主要介绍了javaScript 事件冒泡,事件捕获和事件委托的相关资料,需要的朋友可以参考下,希望能够给你带来帮助

1、事件冒泡:在javascript事件传播过程中,当事件在一个元素上出发之后,事件会逐级传播给先辈元素,直到document为止,有的浏览器可能到window为止。并不是所有的事件都有冒泡现象,比如如下几个:blur事件 ,focus事件, load事件

2、事件委托:事件捕获恰好与事件冒泡相反,它从顶层祖先元素开始,直到事件触发元素。

js事件捕获一般通过DOM2事件模型addEventListener来实现的:

target.addEventListener(type, listener, useCapture)

第三个参数默认设置为false,表示在冒泡阶段出发事件,设置为true时表示在捕获阶段触发,一般我们工作中似乎很少使用事件捕获。但还是要理解一下

<div id="box">
    <div id="middle">
        <div id="inner"></div>
    </div>
</div>
<script>
//事件捕获
window.onload=function(){
    let box=document.getElementById("box");
    let middle=document.getElementById("middle");
    let inner=document.getElementById("inner");
    box.addEventListener("click",function(){console.log("box")},true);
    middle.addEventListener("click",function(){console.log("middle")},true);
    inner.addEventListener("click",function(){console.log("inner")},true);
}
</script>
点击inner,控制台依次输出:box,middle,inner

阻止事件冒泡

平时会用到大量的事件冒泡事件,但是可能我们在某个子级标签不需要传递事件给父级,这时候就需要阻止它事件的冒泡。

一般,使用stopPropagation来阻止事件的冒泡,IE中使用cancleBuble=true,stopPropagation也是事件对象(Event)的一个方法,作用是阻止目标元素的冒泡事件,但是会不阻止默认行为。

//阻止事件冒泡
let btna = document.getElementById('btn');
btna.onclick=function(e){
    window.event? window.event.cancelBubble = true : e.stopPropagation();
 };

3、事件委托:事件委托又可以叫事件代理,事件委托就是利用事件冒泡,只指定一个事件处理程序,就可以管理某一类型的所有事件。

益处:减少dom操作可以提高网页性能,当一个页面的父级元素和很多子级元素都需要操作同一件事件的时候,我们不可能每个元素都去给它绑定一个事件

<ul id="getNum">
    <li>1</li>
    <li>2</li>
    <li>3</li>
    <li>4</li>
    <li>5</li>
    <li>6</li>
</ul>
<script>
let ptclick = document.getElementById('getNum');
let lilist = ptclick.querySelectorAll('li');
for(let i=0;i<lilist.length;i++){
    lilist[i].index = i;
};
ptclick.onclick = function(e){
    var e = e || window.event;
    var target = e.target || e.srcElement;
    console.log(e.target.index);
};
</script>

总结

本篇文章就到这里了,希望能够给你带来帮助,也希望您能够多多关注脚本之家的更多内容!

相关文章

  • JS实现4位随机验证码

    JS实现4位随机验证码

    这篇文章主要为大家详细介绍了JS实现4位随机验证码,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2020-10-10
  • JavaScript运动原理基础知识详解

    JavaScript运动原理基础知识详解

    这篇文章主要介绍了JavaScript运动原理基础知识详解,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
    2020-04-04
  • 教你修改element-ui源码给el-dialog添加全屏功能

    教你修改element-ui源码给el-dialog添加全屏功能

    el-dialog组件提供了fullscreen功能,但是无法满足业务需求。系统使用了许多dialog,不方便重新封装dialog组件,故直接对源码进行修改,这篇文章主要介绍了修改element-ui源码给el-dialog添加全屏功能,需要的朋友可以参考下
    2022-11-11
  • JS获取地址栏参数的几种方法小结

    JS获取地址栏参数的几种方法小结

    本篇文章主要是对JS获取地址栏参数的几种方法进行了介绍,需要的朋友可以过来参考下,希望对大家有所帮助
    2014-02-02
  • 前端使用crypto.js进行加密的函数代码

    前端使用crypto.js进行加密的函数代码

    最近在使用Cookies加密保存数据的时候,接触到crypto,使用还算简单,在这里记录一下
    2020-08-08
  • JavaScript如何删除字符串中子字符串

    JavaScript如何删除字符串中子字符串

    本文介绍了如何从 JavaScript 中的字符串中删除子字符串,并提供了两种常用的方法:replace() 方法和 split() 方法,结合示例代码给大家介绍的非常详细,需要的朋友参考下吧
    2023-05-05
  • js组件SlotMachine实现图片切换效果制作抽奖系统

    js组件SlotMachine实现图片切换效果制作抽奖系统

    这篇文章主要介绍了js组件SlotMachine实现图片切换效果制作抽奖系统的相关资料,需要的朋友可以参考下
    2016-04-04
  • 通过javascript实现扫雷游戏代码实例

    通过javascript实现扫雷游戏代码实例

    这篇文章主要介绍了通过javascript实现扫雷游戏代码实例,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
    2020-02-02
  • javascript常用方法总结

    javascript常用方法总结

    经常使用的一些javascript方法,今天总结了一下,以便以后查询,有需要的小伙伴可以参考下。
    2015-05-05
  • 前端如何用canvas做电影院选票功能详解

    前端如何用canvas做电影院选票功能详解

    这篇文章主要介绍了如何使用HTML、CSS和JavaScript创建一个简单的电影院座位图,并实现选票功能,文中通过代码介绍的非常详细,需要的朋友可以参考下
    2025-02-02

最新评论