renovations
This commit is contained in:
parent
19d9078ca3
commit
0d67d5be7f
42 changed files with 1047 additions and 40 deletions
|
@ -70,14 +70,14 @@
|
|||
</ul>
|
||||
|
||||
[online]
|
||||
[example height=220 src="bubble-target"]
|
||||
[codetabs height=220 src="bubble-target"]
|
||||
[/online]
|
||||
|
||||
Возможна и ситуация, когда `event.target` и `this` -- один и тот же элемент, например если в форме нет других тегов и клик был на самом элементе `<form>`.
|
||||
|
||||
## Прекращение всплытия
|
||||
|
||||
Всплытие идет прямо наверх. Обычно событие будет всплывать наверх и наверх, до элемента `<html>`, а затем до `document` и даже до `window`, вызывая все обработчики на своем пути.
|
||||
Всплытие идёт прямо наверх. Обычно событие будет всплывать наверх и наверх, до элемента `<html>`, а затем до `document`, а иногда даже до `window`, вызывая все обработчики на своем пути.
|
||||
|
||||
**Но любой промежуточный обработчик может решить, что событие полностью обработано, и остановить всплытие.**
|
||||
|
||||
|
@ -86,7 +86,7 @@
|
|||
Например, здесь при клике на кнопку обработчик `body.onclick` не сработает:
|
||||
|
||||
```html
|
||||
<!--+ run autorun -->
|
||||
<!--+ run autorun height=60 -->
|
||||
<body onclick="alert('сюда обработка не дойдёт')">
|
||||
<button onclick="event.stopPropagation()">Кликни меня</button>
|
||||
</body>
|
||||
|
@ -121,13 +121,7 @@
|
|||
|
||||
Оно гораздо менее востребовано, но иногда, очень редко, знание о нём может быть полезным.
|
||||
|
||||
[cut]
|
||||
|
||||
## Три стадии прохода события
|
||||
|
||||
Кроме всплытия, есть ещё стадии прохода события.
|
||||
|
||||
В соответствии со стандартом, их три:
|
||||
Строго говоря, стандарт выделяет целых три стадии прохода события:
|
||||
|
||||
<ol>
|
||||
<li>Событие сначала идет сверху вниз. Эта стадия называется *"стадия перехвата"* (capturing stage).</li>
|
||||
|
@ -143,9 +137,9 @@
|
|||
|
||||
**Ранее мы говорили только о всплытии, потому что другие стадии, как правило, не используются и проходят незаметно для нас.**
|
||||
|
||||
Обработчики, добавленные через `on...`, ничего не знают о стадии перехвата, а начинают работать со всплытия.
|
||||
Обработчики, добавленные через `on...`-свойство, ничего не знают о стадии перехвата, а начинают работать со всплытия.
|
||||
|
||||
**Чтобы поймать событие на стадии перехвата, нужно использовать третий аргумент `addEventListener`:**
|
||||
Чтобы поймать событие на стадии перехвата, нужно использовать третий аргумент `addEventListener`:
|
||||
|
||||
<ul>
|
||||
<li>Если аргумент `true`, то событие будет перехвачено по дороге вниз.</li>
|
||||
|
@ -160,7 +154,7 @@
|
|||
|
||||
Чтобы увидеть перехват в действии, кликните на элементе `P`:
|
||||
|
||||
[example height=220 src="capture"]
|
||||
[codetabs height=220 src="capture"]
|
||||
|
||||
Обработчики сработают в порядке "сверху-вниз": `FORM` -> `DIV` -> `P`.
|
||||
|
||||
|
@ -188,7 +182,7 @@ for(var i=0; i<elems.length; i++) {
|
|||
|
||||
Кликните по внутреннему элементу `P`, чтобы увидеть порядок прохода события:
|
||||
|
||||
[example height=220 src="both"]
|
||||
[codetabs height=220 src="both"]
|
||||
|
||||
Должно быть `FORM` -> `DIV` -> `P` -> `P` -> `DIV` -> `FORM`. Заметим, что элемент `P` участвует в обоих стадиях.
|
||||
|
||||
|
|
|
@ -26,3 +26,8 @@ p {
|
|||
line-height: 50px;
|
||||
margin: 0;
|
||||
}
|
||||
|
||||
body {
|
||||
line-height: 25px;
|
||||
font-size: 16px;
|
||||
}
|
|
@ -1,7 +1,10 @@
|
|||
<!DOCTYPE HTML>
|
||||
<html>
|
||||
<head>
|
||||
<meta charset="utf-8">
|
||||
<link rel="stylesheet" href="example.css">
|
||||
</head>
|
||||
<body>
|
||||
<link type="text/css" rel="stylesheet" href="example.css">
|
||||
|
||||
<form>FORM
|
||||
<div>DIV
|
||||
|
|
|
@ -1,4 +1,5 @@
|
|||
|
||||
|
||||
var elems = document.querySelectorAll('form,div,p');
|
||||
|
||||
for(var i=0; i<elems.length; i++) {
|
||||
|
|
|
@ -26,3 +26,8 @@ p {
|
|||
line-height: 50px;
|
||||
margin: 0;
|
||||
}
|
||||
|
||||
body {
|
||||
line-height: 25px;
|
||||
font-size: 16px;
|
||||
}
|
|
@ -1,9 +1,11 @@
|
|||
<!DOCTYPE HTML>
|
||||
<html>
|
||||
<head>
|
||||
<meta charset="utf-8">
|
||||
<link rel="stylesheet" href="example.css">
|
||||
</head>
|
||||
<body>
|
||||
<link type="text/css" rel="stylesheet" href="example.css">
|
||||
|
||||
Клик выведет <code>target</code> и <code>this</code>:
|
||||
Клик выведет <code>event.target</code> и <code>this</code>:
|
||||
|
||||
<form id="form">FORM
|
||||
<div>DIV
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue