You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
Copy file name to clipboardExpand all lines: 2-ui/2-events/03-event-delegation/article.md
+11-11Lines changed: 11 additions & 11 deletions
Display the source diff
Display the rich diff
Original file line number
Diff line number
Diff line change
@@ -105,13 +105,13 @@ Explanations:
105
105
3. In case of nested tables, `event.target` may be a `<td>`, but lying outside of the current table. So we check if that's actually *our table's*`<td>`.
106
106
4. And, if it's so, then highlight it.
107
107
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.
109
109
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
111
111
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.
113
113
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?
115
115
116
116
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:
117
117
@@ -161,7 +161,7 @@ The handler reads the attribute and executes the method. Take a look at the work
161
161
</script>
162
162
```
163
163
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.
165
165
166
166
So, what advantages does delegation give us here?
167
167
@@ -177,12 +177,12 @@ We could also use classes `.action-save`, `.action-load`, but an attribute `data
177
177
We can also use event delegation to add "behaviors" to elements *declaratively*, with special attributes and classes.
178
178
179
179
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.
181
181
2. A document-wide handler tracks events, and if an event happens on an attributed element -- performs the action.
182
182
183
-
### Counter
183
+
### Behavior: Counter
184
184
185
-
For instance, here the attribute `data-counter` adds a behavior: "increase on click" to buttons:
185
+
For instance, here the attribute `data-counter` adds a behavior: "increase value on click" to buttons:
@@ -204,14 +204,14 @@ If we click a button -- its value is increased. Not buttons, but the general app
204
204
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.
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.
208
208
209
209
For real projects it's normal that there are many handlers on `document` set by different parts of the code.
210
210
```
211
211
212
-
### Toggler
212
+
### Behavior: Toggler
213
213
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`:
0 commit comments