Skip to content

Commit b097168

Browse files
committed
事件
1 parent 5f2786e commit b097168

File tree

2 files changed

+79
-0
lines changed

2 files changed

+79
-0
lines changed

learn_demo/chapter10_3.html

Lines changed: 52 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,52 @@
1+
<!DOCTYPE html>
2+
<html id="h">
3+
4+
<head>
5+
<title>事件捕获与事件冒泡</title>
6+
</head>
7+
<div id="a">
8+
<div id="b">
9+
<button id="c">点我</button>
10+
</div>
11+
</div>
12+
13+
<body>
14+
<script>
15+
//在js中事件传播分为事件捕获和事件冒泡
16+
//其中事件捕获就是捕获事件,还未触发事件冒泡的执行,事件捕获是从从根元素开始,逐级向下,一直到目标元素传递的
17+
//而事件冒泡其实就是事件执行,具体的执行事件,事件冒泡是从目标元素向上传递,传递到它的父元素,一直传到根元素
18+
//举个例子,假设我们点击上面的id为c元素 buttton,事件捕获先发生,实际上会先从根html捕获事件,然后到a再到b和c
19+
//如果事件捕获阶段没有取消事件传播,则事件最终传播到目标元素,此时目标元素执行事件处理
20+
//目标元素执行完事件处理后再逐级向上传播事件,由父元素执行事件处理
21+
22+
//可以总结为事件传播分为三个阶段:
23+
//1. 事件捕获阶段:事件从document对象传播到目标元素的父元素,一直向下直到目标元素本身,这个过程中,可以在父元素上通过事件捕获机制先捕获到事件
24+
//2. 目标阶段:事件到达目标元素,会执行目标元素上的事件捕获和事件冒泡
25+
//3. 事件冒泡阶段:事件从目标元素开始向上冒泡,通过DOM树传播回document对象
26+
27+
//相当于事件可以分为事件捕获和事件冒泡两大类,每个元素都可以为这两类注册监听函数
28+
//事件开始传播时,会先从根元素到目标元素执行事件捕获注册的函数
29+
//执行完成后再从目标元素到根元素执行事件冒泡注册的函数
30+
//当然我们也可以在任意一个元素上的事件捕获/事件冒泡函数 上停止事件的传播
31+
32+
33+
//其中addEventListener既可以设置事件捕获,也可以设置事件冒泡,取决于第三个参数
34+
//如果第三个参数是true,则为注册了一个事件捕获,如果第三个参数不填或者false 则注册的是一个事件冒泡
35+
document.getElementById("a").addEventListener("click", function () {
36+
alert("这是元素a上的事件捕获,会第一个触发")
37+
}, true);
38+
document.getElementById("b").addEventListener("click", function () {
39+
alert("这是元素b上的事件冒泡,会最后一个触发")
40+
})
41+
document.getElementById("c").addEventListener("click", function () {
42+
alert("这是元素c上的事件冒泡,会第二个触发")
43+
})
44+
45+
//如果在父元素停止事件传播,则后续流程都会停止
46+
document.getElementById("h").addEventListener("click", function (event) {
47+
event.stopPropagation()
48+
}, true)
49+
</script>
50+
</body>
51+
52+
</html>

learn_demo/chapter10_4.html

Lines changed: 27 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,27 @@
1+
<!DOCTYPE html>
2+
<html>
3+
4+
<head>
5+
<title>form submi事件</title>
6+
</head>
7+
8+
<body>
9+
<div>
10+
<form onsubmit="handleFormSubmit(event); return false;">
11+
<input type="text" name="myInput" />
12+
<input type="submit" value="点我提交">
13+
</form>
14+
</div>
15+
<script>
16+
function handleFormSubmit(event) {
17+
event.preventDefault()
18+
let form = event.target
19+
let fromData = new FormData(form)
20+
let text = fromData.get("myInput")
21+
console.log(text)
22+
alert(text)
23+
}
24+
</script>
25+
</body>
26+
27+
</html>

0 commit comments

Comments
 (0)