我们上一个篇章认识了绑定事件,了解到不管是什麽节点,都可以绑定事件
那为什麽 JavaScript 会知道我们触发事件?
当我们点击网页中任何一个元素,是不是也等於点击到网页本身!
而点击元素与网页本身这个过程是有顺序的,称为事件流程,事件流程共有两个机制:
当我们点击蓝色的 div
时,网页会从根目录开始往下找到我们点击的元素,这个过程称为事件捕获
而事件冒泡则刚好反过来!
当我们点击蓝色的 div
时,会从我们点击的元素往上传递到根目录,这个过程称为事件捕获
而如何确认冒泡的情况是否发生?
就把每个元素都绑上 onclick
点击事件,连 body
也绑定。
<div class="box parent red" id="red">
<div class="box child green" id="green">
</div>
<div class="box child blue" id="blue">
</div>
</div>
// 绑定元素
const body = document.body;
const red = document.getElementById("red");
const green = document.getElementById("green");
const blue = document.getElementById("blue");
// 绑定监听
body.onclick = function(){
console.log("I'm body");
}
red.onclick = function(){
console.log("I'm parent red");
}
green.onclick = function(){
console.log("I'm child green");
}
blue.onclick = function(){
console.log("I'm child blue");
}
这时点击蓝色 div
就会触发事件冒泡,会看到先出现蓝色依序往根标签传递,而因为没点击绿色,所以绿色不会触发!
"I'm child blue"
"I'm parent red"
"I'm body"
在大部分情况下,冒泡事件都是有用的,例如:拖曳功能,如果不希望冒泡事件触发,可以针对触发事件元素取消冒泡事件
blue.onclick = function(event){
event = event || window.event; // 避免找不到 event
console.log("I'm child blue");
event.cancelBubble = true; // 取消冒泡事件
}
这样点击就只会触发蓝色的事件,不会往上触发了!
这也是 JavaScript 经常会接触到的事件,只是平常我们都会需要冒泡事件,只有特定时候才会取消冒泡,算是前端基础面试题
<<: 【Day 20】深度学习(Deep Learning)--- Tip(五)
>>: Day 18 : 笔记篇 05— 如何整理学习笔记?分享我的学习笔记整理流程
在过去的5-7年当中,ML已经不再只限於研究人员能够接触、使用,越来越多的AI/ML工具以及产品出现...
Odoo 的onchange 有些特别要注意的地方, 像是onchange会影响到的栏位都要写入XM...
首先,让我们创建一个 Eloquent 模型。模型通常位於app目录中,但您可以将它们随意放置在可以...
Chart 表格可以看出资料中的细节,所以一开始从表格开始搭建,而进一步,图表可以更直觉的看出整体...
终於来到第30天了!!! 没想到自已可以连续发文30天 要一边上班一边写文章真的不容易呢 尤其是刚到...