Skip to content

Commit 500b7c9

Browse files
committed
minor
1 parent a6a0031 commit 500b7c9

File tree

4 files changed

+14
-14
lines changed

4 files changed

+14
-14
lines changed

2-ui/2-events/02-bubbling-and-capturing/article.md

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -110,7 +110,7 @@ For instance:
110110
111111
1. We create a nested menu. Each submenu handles clicks on its elements and calls `stopPropagation` so that the outer menu won't trigger.
112112
2. Later we decide to catch clicks on the whole window, to track users' behavior (where people click). Some analytic systems do that. Usually the code uses `document.addEventListener('click'…)` to catch all clicks.
113-
3. Our analytic won't work over the area where clicks are stopped by `stopPropagation`. We've got a "dead zone".
113+
3. Our analytic won't work over the area where clicks are stopped by `stopPropagation`. Sadly, we've got a "dead zone".
114114
115115
There's usually no real need to prevent the bubbling. A task that seemingly requires that may be solved by other means. One of them is to use custom events, we'll cover them later. Also we can write our data into the `event` object in one handler and read it in another one, so we can pass to handlers on parents information about the processing below.
116116
```
@@ -134,7 +134,7 @@ That is: for a click on `<td>` the event first goes through the ancestors chain
134134

135135
**Before we only talked about bubbling, because the capturing phase is rarely used. Normally it is invisible to us.**
136136

137-
Handlers added using `on<event>`-property or using HTML attributes or using `addEventListener(event, handler)` don't know anything about capturing, they only run on the 2nd and 3rd phases.
137+
Handlers added using `on<event>`-property or using HTML attributes or using two-argument `addEventListener(event, handler)` don't know anything about capturing, they only run on the 2nd and 3rd phases.
138138

139139
To catch an event on the capturing phase, we need to set the handler `capture` option to `true`:
140140

2-ui/2-events/02-bubbling-and-capturing/eventflow.svg

Lines changed: 2 additions & 2 deletions
Loading

2-ui/2-events/03-event-delegation/article.md

Lines changed: 10 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -105,13 +105,13 @@ Explanations:
105105
3. In case of nested tables, `event.target` may be a `<td>` lying outside of the current table. So we check if that's actually *our table's* `<td>`.
106106
4. And, if it's so, then highlight it.
107107

108-
## Delegation example: actions in markup
108+
As the result, we have a fast, efficient highlighting code, that doesn't care about the total number of `<td>` in the table.
109109

110-
The event delegation may be used to optimize event handling. We use a single handler for similar actions on many elements. Like we did it for highlighting `<td>`.
110+
## Delegation example: actions in markup
111111

112-
But we can also use a single handler as an entry point for many different things.
112+
There are other uses for event delegation.
113113

114-
For instance, we want to make a menu with buttons "Save", "Load", "Search" and so on. And there's an object with methods `save`, `load`, `search`....
114+
Let's say, we want to make a menu with buttons "Save", "Load", "Search" and so on. And there's an object with methods `save`, `load`, `search`... How to match them?
115115

116116
The first idea may be to assign a separate handler to each button. But there's a more elegant solution. We can add a handler for the whole menu and `data-action` attributes for buttons that has the method to call:
117117

@@ -161,7 +161,7 @@ The handler reads the attribute and executes the method. Take a look at the work
161161
</script>
162162
```
163163

164-
Please note that `this.onClick` is bound to `this` in `(*)`. That's important, because otherwise `this` inside it would reference the DOM element (`elem`), not the menu object, and `this[action]` would not be what we need.
164+
Please note that `this.onClick` is bound to `this` in `(*)`. That's important, because otherwise `this` inside it would reference the DOM element (`elem`), not the `Menu` object, and `this[action]` would not be what we need.
165165

166166
So, what the delegation gives us here?
167167

@@ -177,10 +177,10 @@ We could also use classes `.action-save`, `.action-load`, but an attribute `data
177177
We can also use event delegation to add "behaviors" to elements *declaratively*, with special attributes and classes.
178178

179179
The pattern has two parts:
180-
1. We add a special attribute to an element.
180+
1. We add a custom attribute to an element that describes its behavior.
181181
2. A document-wide handler tracks events, and if an event happens on an attributed element -- performs the action.
182182

183-
### Counter
183+
### Behavior: Counter
184184

185185
For instance, here the attribute `data-counter` adds a behavior: "increase value on click" to buttons:
186186

@@ -204,14 +204,14 @@ If we click a button -- its value is increased. Not buttons, but the general app
204204
There can be as many attributes with `data-counter` as we want. We can add new ones to HTML at any moment. Using the event delegation we "extended" HTML, added an attribute that describes a new behavior.
205205

206206
```warn header="For document-level handlers -- always `addEventListener`"
207-
When we assign an event handler to the `document` object, we should always use `addEventListener`, not `document.onclick`, because the latter will cause conflicts: new handlers overwrite old ones.
207+
When we assign an event handler to the `document` object, we should always use `addEventListener`, not `document.on<event>`, because the latter will cause conflicts: new handlers overwrite old ones.
208208

209209
For real projects it's normal that there are many handlers on `document` set by different parts of the code.
210210
```
211211
212-
### Toggler
212+
### Behavior: Toggler
213213
214-
One more example. A click on an element with the attribute `data-toggle-id` will show/hide the element with the given `id`:
214+
One more example of behavior. A click on an element with the attribute `data-toggle-id` will show/hide the element with the given `id`:
215215
216216
```html autorun run height=60
217217
<button *!*data-toggle-id="subscribe-mail"*/!*>

figures.sketch

-15 Bytes
Binary file not shown.

0 commit comments

Comments
 (0)