博客
关于我
事件冒泡、捕获?如何阻止
阅读量:388 次
发布时间:2019-03-05

本文共 1941 字,大约阅读时间需要 6 分钟。

事件冒泡与事件捕获

事件冒泡

事件冒泡是指当点击某个元素时,由目标元素开始向上冒泡,依次触发父元素的点击事件。具体而言,点击子元素会向祖先元素依次触发事件。以下示例展示了事件冒泡的工作原理:

  • 事件处理顺序:当点击box元素时,会依次触发以下事件:
  • box的点击事件
  • wraper的点击事件
  • content的点击事件
// 事件冒泡示例
const box = document.querySelector('.box');
const wraper = document.querySelector('.wraper');
const content = document.querySelector('.content');
box.addEventListener('click', (e) => {
console.log('box冒泡');
}, false); // 事件冒泡使用false参数
wraper.addEventListener('click', (e) => {
console.log('wraper冒泡');
}, false);
content.addEventListener('click', (e) => {
console.log('content冒泡');
}, false);

事件捕获

事件捕获的特点是事件处理顺序相反,事件从目标元素开始,从上到下触发。与事件冒泡相比,仅需将事件监听的第三个参数设置为true即可实现。

// 事件捕获示例
box.addEventListener('click', (e) => {
console.log('box捕获');
}, true); // 事件捕获使用true参数
wraper.addEventListener('click', (e) => {
console.log('wraper捕获');
}, true);
content.addEventListener('click', (e) => {
console.log('content捕获');
}, true);

事件冒泡与捕获的优先级

在同一个元素上注册多个事件时,事件捕获会优先于事件冒泡执行。以下示例展示了事件处理顺序:

// 事件捕获
box.addEventListener('click', (e) => {
console.log('box捕获');
}, true);
wraper.addEventListener('click', (e) => {
console.log('wraper捕获');
}, true);
content.addEventListener('click', (e) => {
console.log('content捕获');
}, true);
// 事件冒泡
box.addEventListener('click', (e) => {
console.log('box冒泡');
}, false);
wraper.addEventListener('click', (e) => {
console.log('wraper冒泡');
}, false);
content.addEventListener('click', (e) => {
console.log('content冒泡');
}, false);

结果显示,事件捕获先于事件冒泡执行。

阻止事件捕获与冒泡

要阻止事件捕获或事件冒泡,可以使用e.stopPropagation()方法。以下示例展示了如何阻止事件传播:

// 阻止事件捕获和冒泡
box.addEventListener('click', (e) => {
e.stopPropagation();
console.log('box冒泡');
}, false);
wraper.addEventListener('click', (e) => {
console.log('wraper冒泡');
}, false);
content.addEventListener('click', (e) => {
console.log('content冒泡');
}, false);

需要注意的是,IE浏览器的事件对象与其他浏览器存在差异,建议在跨浏览器开发时谨慎使用.stopPropagation()方法。

转载地址:http://nkhwz.baihongyu.com/

你可能感兴趣的文章
NLP采用Bert进行简单文本情感分类
查看>>
NLP问答系统:使用 Deepset SQUAD 和 SQuAD v2 度量评估
查看>>
NLP项目:维基百科文章爬虫和分类【02】 - 语料库转换管道
查看>>
NLP:使用 SciKit Learn 的文本矢量化方法
查看>>
nmap 使用方法详细介绍
查看>>
Nmap扫描教程之Nmap基础知识
查看>>
nmap指纹识别要点以及又快又准之方法
查看>>
Nmap渗透测试指南之指纹识别与探测、伺机而动
查看>>
Nmap端口扫描工具Windows安装和命令大全(非常详细)零基础入门到精通,收藏这篇就够了
查看>>
NMAP网络扫描工具的安装与使用
查看>>
NMF(非负矩阵分解)
查看>>
nmon_x86_64_centos7工具如何使用
查看>>
NN&DL4.1 Deep L-layer neural network简介
查看>>
NN&DL4.3 Getting your matrix dimensions right
查看>>
NN&DL4.7 Parameters vs Hyperparameters
查看>>
NN&DL4.8 What does this have to do with the brain?
查看>>
nnU-Net 终极指南
查看>>
No 'Access-Control-Allow-Origin' header is present on the requested resource.
查看>>
NO 157 去掉禅道访问地址中的zentao
查看>>
no available service ‘default‘ found, please make sure registry config corre seata
查看>>