JS阻止事件冒泡的方法*基础原理与运用

news2024/9/24 11:24:59

目录

事件冒泡html布局css样式代码

非标准写法:IE6-8 利用事件对象cancelBubble属性

标准写法:利用事件对象里面的stopPropagation()方法

下拉菜单

操作方法


事件冒泡html布局css样式代码

首先创建三个嵌套的方块,便于案例分析

    <div id="box1">box1
        <div id="box2">box2
            <div id="box3">box3</div>
        </div>
    </div>
    <div id="box4">box4
        <div id="box5">box5
            <div id="box6">box6</div>
        </div>
    </div>
  <style>
        #box1,
        #box4 {
            width: 300px;
            height: 300px;
            background-color: red;
            margin-bottom: 3px;
        }

        #box2,
        #box5 {
            width: 200px;
            height: 200px;
            background-color: aquamarine;
        }

        #box3,
        #box6 {
            width: 100px;
            height: 100px;
            background-color: blanchedalmond;
        }
    </style>

样式显示如下 

 

  • 非标准写法:IE6-8 利用事件对象cancelBubble属性

事件会停在添加的那一层,不会往外冒泡

    <script>
        window.onload = function () {
            var box1 = document.getElementById("box1");
            var box2 = document.getElementById("box2");
            var box3 = document.getElementById("box3");

            box1.onclick = function (e) {
                console.log('box1被点击');
                // e.cancelBubble = true;
            };
            box2.onclick = function (e) {
                console.log('box2被点击');
                e.cancelBubble = true;
            };
            box3.onclick = function (e) {
                console.log('box3被点击');
                e.cancelBubble = true;
            };
        };
    </script>

只给box3设置取消冒泡,单击box3,只显示box3的事件,父级被阻止

给box2,box3设置取消冒泡,就可以实现点击哪个就显示哪个元素自己的事件

  • 标准写法:利用事件对象里面的stopPropagation()方法


            var box4 = document.getElementById("box4");
            var box5 = document.getElementById("box5");
            var box6 = document.getElementById("box6");

            box4.onclick = function (e) {
                console.log('box4被点击');
                // e.stopPropagation();
            };
            box5.onclick = function (e) {
                console.log('box5被点击');
                e.stopPropagation();
            };
            box6.onclick = function (e) {
                console.log('box6被点击');
                e.stopPropagation();
            };
      

下拉菜单

html部分

 <input type="text">
    <ul>
        <li>red</li>
        <li>blue</li>
        <li>yellow</li>
        <li>black</li>
        <li>white</li>
    </ul>

下面是代码部分

    <script>
        window.onload = function () {
            var input = document.querySelector("input");
            var ul = document.querySelector("ul");
            var lis = document.querySelectorAll("li");

            input.onclick = function () {
                ul.style.display = 'block';
            };

            for (var i = 0; i < lis.length; i++) {
                lis[i].onclick = function () {
                    input.value = this.innerHTML;

                    ul.style.display = 'none';
                };
            }
            // 注意这里涉及冒泡i
            document.onclick = function () {
                ul.style.display = 'none';
            };
        };
    </script>

 运行出现的问题是,点击颜色输入框显示颜色,同时菜单消失,再次点击input,菜单不会出现

原因是input属于document,,点击input,事件会向上冒泡,所以input点击触发菜单显示,但是冒泡到document,菜单显示被取消了,所以导致菜单没有出现,阻止事件冒泡就可以解决这个问题。

操作方法

在input点击事件里阻止事件冒泡


            input.onclick = function (e) {
                ul.style.display = 'block';

                // 阻止事件冒泡
                e.cancelBubble=true;
            };

想让事件在哪里停止,就在哪里添加阻止事件冒泡的方法,阻止冒泡到document,就是给input添加阻止事件冒泡的方法。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/137528.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

NewSQL如何解决高可用、分片?

1 什么是New SQL&#xff1f; 无论你其他方面做的比Old SQL好再多&#xff0c;SQL和ACID是刚需&#xff0c;这个命你革不掉的。你不支持SQL&#xff0c;就不会有多少人用。所以近几年很多之前不支持SQL的数据库&#xff0c;都开始支持SQL了&#xff0c;甚至于像Spark、Flink这…

自然语言处理 第十章 信息抽取 复习

信息抽取信息抽取复习重点&#xff1a;信息抽取概述从任务内容分为&#xff1a;从处理文档类型分为&#xff1a;从发展时间和处理文档分为&#xff1a;实体识别与抽取限定域命名实体识别基于规则或字典的方法 &#xff1a;规则模版&#xff08;字典&#xff09;匹配统计学习方法…

23.1、Java中的类加载器反射模块化

1.类加载器 1.1类加载 类加载的描述 当程序要使用某个类时&#xff0c;如果该类还未被加载到内存中&#xff0c;则系统会通过类的加载&#xff0c;类的连接&#xff0c;类的初始化这三个步骤来对类进行初始化。如果不出现意外情况&#xff0c;JVM将会连续完成这三个步骤&#…

spring boot 七:SpringBoot自定义配置Jackson的ObjectMapper

spring boot 七&#xff1a;SpringBoot2.5.4自定义配置Jackson的ObjectMapper 1 前言 SpringBoot底层默认使用的自动依赖注入&#xff0c;即spring-boot-autoconfigure包的META-INF下&#xff0c;存在spring.factories文件&#xff0c;里面有自动注入的jackson自动配置类。在…

[数据结构基础]栈和队列的结构及接口函数

一. 栈 1.1 栈的概念及结构 栈是一种特殊的线性表&#xff0c;其只允许在固定的一段进行插入和删除元素的操作。进行数据插入和删除的一端成为栈顶&#xff0c;另一端称为栈底。栈结构中的数据遵循先进后出原则&#xff08;LIFO&#xff1a;Last in First Out&#xff09;&am…

03 Hive概述

Hive概述1、什么是Hive2、Hive优缺点3、Hive架构原理4、Hive 和 数据库比较5、Hive计算引擎1、什么是Hive 由Facebook开源用于解决海量结构化日志的数据统计工具。 Hive是基于Hadoop的一个数据仓库工具&#xff0c;可以将结构化的数据文件映射为一张表&#xff0c;并提供 类SQ…

如何在外籍人员子女学校和同事有效工作

香港 (Xinwengao.com) — PD Academia 的 Henry Wong 在新加坡出生长大&#xff0c;在美国接受高等教育&#xff0c;现在在美国半退休。他在中国生活了16年。他与许多西方人和中国人一起工作。他始终将自己视为东方与西方的交汇点&#xff0c;是学术界与行政部门之间的桥梁。他…

刷油漆【中等】

在一个8 \times 8 的网格中&#xff0c;一些水平的行被涂成红色&#xff0c;一些垂直的列被涂成蓝色&#xff0c;条纹是按顺序画的&#xff0c;一个接着一个。绘制条纹时它会重新绘制它所经过的所有单元格。(原理跟刷油漆一样)现在你需要确定最后一个上色的是什么颜色红色条纹是…

静态路由配置

获取未知网段的路由信息&#xff1a; 静态路由&#xff1a;由网络管理员手工配置的路由条目 动态路由&#xff1a;所有路由器上开启同一种路由协议&#xff0c;之后&#xff0c;通过路由器之间沟通&#xff0c;协商&#xff0c;最终计算生成路由条目。 静态路由的优点&#xf…

MySQL2-初识MySQL

目录 1.数据库 1.1.什么是数据库? 1.2.为什么要用数据库&#xff1f; 1.2.1.数据存储的发展史 1.2.2.文件存储的缺点 1.3.数据库分类 1.3.1.关系型数据库&#xff08;RDBMS&#xff09; 1.3.2.非关系型数据库&#xff08;了解&#xff09; 1.3.3.关系型数据库和非关系…

STM32——TIM简介与TIM中断

文章目录一、TIM简介二、定时器类型基本定时器通用定时器高级定时器三、定时中断基本结构四、时序图预分频器时序计数器时序计数器无预装时序计数器有预装时序RCC时钟树五、定时器定时中断六、定时器外部时钟七、定时器库函数&#xff08;tim.h&#xff09;一、TIM简介 TIM&am…

【设计模式篇】设计模式3类23种

创建型模式 创建型模式提供了创建对象的机制&#xff0c; 能够提升已有代码的灵活性和可复用性。 这里面比较重要和经常用到时单例模式、工厂模式和原型模式。 单例模式 单例模式是一种创建型设计模式&#xff0c; 让你能够保证一个类只有一个实例&#xff0c; 并提供一个访问…

antd 动态增减表单项的使用

需求 首先这是基于antd的Form组件&#xff0c;需求1&#xff1a; 单选按钮组 选择设置时间 展示时间选择器需求2&#xff1a; 动态添加时间选择器(最多添加10个、时间为空校验、时间段重叠校验)需求3&#xff1a; 开关需求4&#xff1a;编辑时赋值 1. 单选钮组 <Radio.Gro…

4.6.1、路由选择协议概述

1、静态/动态路由 2、主要特点 因特网所采用的路由选择协议的主要特点 例如&#xff1a;一个较大的因特网提供商就可划分为一个自治系统 在自治系统内部和外部采用不同类别的路由选择协议&#xff0c;分别进行路由选择 3、分层次的路由选择协议 如下所示&#xff0c;将网络…

ArcGIS基础实验操作100例--实验44融合细碎多边形

本实验专栏参考自汤国安教授《地理信息系统基础实验操作100例》一书 实验平台&#xff1a;ArcGIS 10.6 实验数据&#xff1a;请访问实验1&#xff08;传送门&#xff09; 高级编辑篇--实验44 融合细碎多边形 目录 一、实验背景 二、实验数据 三、实验步骤 &#xff08;1&am…

k8s基础

一、基本介绍 Kubernetes&#xff0c;简称K8s&#xff0c;是用8代替8个字符“ubernete”而成的缩写。是一个开源的&#xff0c;用于管理云平台中多个主机上的容器化的应用&#xff0c;Kubernetes的目标是让部署容器化的应用简单并且高效(powerful) , Kubernetes提供了应用部署…

Linux 下 python3.9.8的安装

1. 准备安装环境 yum install gcc zlib* openssl* -y 2. linux 下 python 安装包的获取 官网下载地址: https://www.python.org/downloads/ 找到 自己想要的版本。 方式一&#xff1a;直接点击该链接下载&#xff0c;然后将安装包通过xftp 传送到远程服务器 的 /opt 路…

k8s之搭建单机集群

写在前面 本文一起看下如何在单机环境下搭建k8s集群。 基础环境准备参考这篇文章 。 1&#xff1a;k8s的前世今生 现在当我们提到容器技术时&#xff0c;首先想到的肯定是docker&#xff0c;但其实在docker之前&#xff0c;谷歌公司就已经有了类似的技术&#xff0c;我们知道…

借助免费AI艺术平台生成头像

随着 AI 的兴起&#xff0c;看到越来越多的实例通过 OpenAI 的举措变得轻松&#xff0c;使得 AI 艺术在今天早已不是什么新鲜事物&#xff0c;而且在游戏领域也开始有所应用。人工智能&#xff08;AI&#xff0c;artificial intelligence&#xff09;艺术&#xff0c;更准确地说…

数据挖掘与机器学习作业_09 贝叶斯

贝叶斯 贝叶斯公式 后验概率 先验概率 * 似然估计 from sklearn.model_selection import GridSearchCV from sklearn.naive_bayes import BernoulliNB from sklearn.naive_bayes import GaussianNB from sklearn.naive_bayes import MultinomialNB from sklearn.naive_bayes…