Would you like to inspect the original subtitles? These are the user uploaded subtitles that are being translated:
1
00:00:01,320 --> 00:00:04,820
Let's now make our application actually do something
2
00:00:04,820 --> 00:00:06,943
when we click on the Check button.
3
00:00:08,610 --> 00:00:11,740
So this is going to be the first time that our code
4
00:00:11,740 --> 00:00:15,430
reacts to something that happens in the DOM.
5
00:00:15,430 --> 00:00:16,340
And for that,
6
00:00:16,340 --> 00:00:19,120
we need to use an event listener.
7
00:00:19,120 --> 00:00:23,170
Now, an event is something that happens on the page.
8
00:00:23,170 --> 00:00:25,220
For example, a mouse click,
9
00:00:25,220 --> 00:00:26,910
or a mouse moving,
10
00:00:26,910 --> 00:00:28,300
or a key press,
11
00:00:28,300 --> 00:00:30,450
or many other events.
12
00:00:30,450 --> 00:00:32,530
Then, with an event listener,
13
00:00:32,530 --> 00:00:35,180
we can wait for a certain event to happen,
14
00:00:35,180 --> 00:00:37,660
and then react to it.
15
00:00:37,660 --> 00:00:39,650
So let's try it out now.
16
00:00:39,650 --> 00:00:42,630
And let's actually start by getting rid of this code
17
00:00:42,630 --> 00:00:45,310
because this has actually nothing yet to do
18
00:00:45,310 --> 00:00:46,910
with the application.
19
00:00:46,910 --> 00:00:49,060
But now we will actually start developing
20
00:00:49,060 --> 00:00:51,253
the application step by step.
21
00:00:52,200 --> 00:00:54,900
Anyway, in order to listen for events,
22
00:00:54,900 --> 00:00:56,910
we first need to select the element
23
00:00:56,910 --> 00:00:58,940
where the event should happen.
24
00:00:58,940 --> 00:00:59,773
And in this case,
25
00:00:59,773 --> 00:01:02,440
we want to listen to the event on this
26
00:01:02,440 --> 00:01:03,560
button element here,
27
00:01:03,560 --> 00:01:05,120
so this Check button.
28
00:01:05,120 --> 00:01:06,910
Because this is where the click
29
00:01:06,910 --> 00:01:09,840
that we're interested in will happen.
30
00:01:09,840 --> 00:01:11,230
So when we click on this button,
31
00:01:11,230 --> 00:01:12,853
something should happen.
32
00:01:14,810 --> 00:01:19,000
So let's select that button element.
33
00:01:19,000 --> 00:01:20,730
So querySelector.
34
00:01:22,510 --> 00:01:24,650
And then once more, we need to go ahead
35
00:01:24,650 --> 00:01:28,760
and grab the class name of this button.
36
00:01:28,760 --> 00:01:31,360
And so here it is.
37
00:01:31,360 --> 00:01:33,760
Now here, we actually have two class names,
38
00:01:33,760 --> 00:01:36,000
we have button and check.
39
00:01:36,000 --> 00:01:38,900
But the button class here is the more generic one,
40
00:01:38,900 --> 00:01:41,350
which also applies to this other button,
41
00:01:41,350 --> 00:01:43,050
this Again button here.
42
00:01:43,050 --> 00:01:45,230
So the class that we are interested in
43
00:01:45,230 --> 00:01:46,793
is just the check class.
44
00:01:48,110 --> 00:01:52,760
So again, the dot for the class selector,
45
00:01:52,760 --> 00:01:53,763
and then check.
46
00:01:54,740 --> 00:01:58,740
And so this will select the button element itself.
47
00:01:58,740 --> 00:02:00,170
So just as before,
48
00:02:00,170 --> 00:02:03,130
this here will then return an element.
49
00:02:03,130 --> 00:02:04,630
And now on that element,
50
00:02:04,630 --> 00:02:08,070
we can call the addEventListener method.
51
00:02:08,070 --> 00:02:11,773
So addEventListener.
52
00:02:12,800 --> 00:02:13,920
And this is a method
53
00:02:13,920 --> 00:02:17,700
and so we need to call it once more using the parenthesis.
54
00:02:17,700 --> 00:02:19,770
Now, there are actually multiple ways
55
00:02:19,770 --> 00:02:22,600
to listen for events in JavaScript.
56
00:02:22,600 --> 00:02:25,430
But using this addEventListener method
57
00:02:25,430 --> 00:02:28,980
is the best one and also the most used one.
58
00:02:28,980 --> 00:02:29,813
Okay.
59
00:02:29,813 --> 00:02:32,160
Now into this addEventListener method,
60
00:02:32,160 --> 00:02:35,940
we first need to pass in the type of the event.
61
00:02:35,940 --> 00:02:38,353
And in this case, it's just a simple click.
62
00:02:39,280 --> 00:02:42,200
So the name of the event is actually Click,
63
00:02:42,200 --> 00:02:44,980
and so that is the first argument
64
00:02:44,980 --> 00:02:47,290
that we pass here into this function.
65
00:02:47,290 --> 00:02:48,770
But now, we actually need
66
00:02:48,770 --> 00:02:52,280
to tell the event listener what to do.
67
00:02:52,280 --> 00:02:55,600
So basically, we need to specify the reaction
68
00:02:55,600 --> 00:02:57,230
to the Click event.
69
00:02:57,230 --> 00:02:59,667
And we do that by defining a function.
70
00:02:59,667 --> 00:03:02,930
And that function will contain exactly the code
71
00:03:02,930 --> 00:03:06,890
that should be executed whenever this click event happens
72
00:03:06,890 --> 00:03:08,680
on this Check button.
73
00:03:08,680 --> 00:03:11,950
And that function is going to be called the event handler.
74
00:03:11,950 --> 00:03:15,430
Now, this method, this addEventListener method here
75
00:03:15,430 --> 00:03:17,630
is a special kind of function.
76
00:03:17,630 --> 00:03:20,200
That's because as a second argument,
77
00:03:20,200 --> 00:03:22,503
it expects this event handler function
78
00:03:22,503 --> 00:03:24,420
that we just talked about.
79
00:03:24,420 --> 00:03:27,230
So again, here as the second argument,
80
00:03:27,230 --> 00:03:31,870
we now need to pass in a function value as an argument.
81
00:03:31,870 --> 00:03:34,990
And that's probably quite confusing, I know.
82
00:03:34,990 --> 00:03:36,950
But that's no problem at this point.
83
00:03:36,950 --> 00:03:38,270
This will make more sense,
84
00:03:38,270 --> 00:03:40,656
as we do this over and over again.
85
00:03:40,656 --> 00:03:43,040
For now, just remember what you learned
86
00:03:43,040 --> 00:03:44,920
in the fundamental section,
87
00:03:44,920 --> 00:03:48,720
which is that a function is also just a value.
88
00:03:48,720 --> 00:03:50,920
And if a function is just a value,
89
00:03:50,920 --> 00:03:54,020
then we can also pass it into another function
90
00:03:54,020 --> 00:03:55,290
as an argument,
91
00:03:55,290 --> 00:03:59,410
just like any other value,
like a string or a number.
92
00:03:59,410 --> 00:04:02,060
So let's create that function here.
93
00:04:02,060 --> 00:04:06,573
And just like before, we do that writing function,
94
00:04:08,281 --> 00:04:11,780
and then the curly braces for the function body.
95
00:04:11,780 --> 00:04:12,613
Okay.
96
00:04:12,613 --> 00:04:16,220
And now all we have to do is to specify what should happen.
97
00:04:16,220 --> 00:04:18,060
And to start, what we want to happen
98
00:04:18,060 --> 00:04:19,790
is to simply log to the console,
99
00:04:19,790 --> 00:04:23,643
the value that is here in this input field.
100
00:04:25,450 --> 00:04:27,640
So console.log,
101
00:04:27,640 --> 00:04:29,650
document.querySelector.
102
00:04:31,590 --> 00:04:34,430
And actually, we already have this code up there,
103
00:04:34,430 --> 00:04:36,670
but let's just write it again.
104
00:04:36,670 --> 00:04:41,253
So remember that this element here has the class guess.
105
00:04:42,100 --> 00:04:45,223
And then from this element, we take the value.
106
00:04:47,290 --> 00:04:48,123
Okay?
107
00:04:48,123 --> 00:04:49,530
And that's it.
108
00:04:49,530 --> 00:04:50,660
So let's save it.
109
00:04:50,660 --> 00:04:55,000
Let's test it, and then we will just go over this again.
110
00:04:55,000 --> 00:04:56,350
So I will write nine.
111
00:04:56,350 --> 00:04:57,970
And now when I click this button,
112
00:04:57,970 --> 00:05:00,733
this nine should appear down here in the console.
113
00:05:02,410 --> 00:05:03,943
And it does.
114
00:05:05,170 --> 00:05:06,740
Okay, great.
115
00:05:06,740 --> 00:05:08,180
Great job.
116
00:05:08,180 --> 00:05:10,860
So let's quickly go over this again.
117
00:05:10,860 --> 00:05:15,330
So we selected this button here using querySelector.
118
00:05:15,330 --> 00:05:19,490
And then we use the addEventListener method on that element
119
00:05:19,490 --> 00:05:21,510
to attach an event handler.
120
00:05:21,510 --> 00:05:25,190
And that event handler is this function here.
121
00:05:25,190 --> 00:05:28,940
Okay, so this is, again, just a function expression.
122
00:05:28,940 --> 00:05:32,713
So it's similar to when we do just, for example,
123
00:05:33,920 --> 00:05:37,573
this and then just log something to the console.
124
00:05:38,790 --> 00:05:42,030
So this is also just a function value, right?
125
00:05:42,030 --> 00:05:45,720
And then we can assign that to a variable.
126
00:05:45,720 --> 00:05:49,320
And then we call all of this a function expression.
127
00:05:49,320 --> 00:05:51,580
You will remember that, right?
128
00:05:51,580 --> 00:05:54,520
And so here, basically, we did the exact same thing.
129
00:05:54,520 --> 00:05:56,860
So we wrote here a function
130
00:05:56,860 --> 00:05:59,170
that has a similar format as this.
131
00:05:59,170 --> 00:06:02,120
We simply did not assign it to any variable.
132
00:06:02,120 --> 00:06:04,700
Instead, we passed it directly here
133
00:06:04,700 --> 00:06:07,723
into the addEventListener method.
134
00:06:08,750 --> 00:06:10,380
So as the first argument,
135
00:06:10,380 --> 00:06:13,290
we had the name of the event that we're listening for,
136
00:06:13,290 --> 00:06:14,580
which is a click.
137
00:06:14,580 --> 00:06:16,400
And then as the second argument,
138
00:06:16,400 --> 00:06:18,770
we have this function value.
139
00:06:18,770 --> 00:06:21,010
And this function simply contains the code
140
00:06:21,010 --> 00:06:24,940
that we want to execute whenever the event happens.
141
00:06:24,940 --> 00:06:27,590
Also, note that we do not call
142
00:06:27,590 --> 00:06:30,280
this function here anywhere, right?
143
00:06:30,280 --> 00:06:32,690
We only define the function here,
144
00:06:32,690 --> 00:06:35,350
and then pass it into the event handler.
145
00:06:35,350 --> 00:06:37,290
But it is the JavaScript engine
146
00:06:37,290 --> 00:06:40,731
who will call this function as soon as the event happens.
147
00:06:40,731 --> 00:06:41,564
Okay?
148
00:06:41,564 --> 00:06:43,510
That's important to understand.
149
00:06:43,510 --> 00:06:46,890
So again, this function will not be called immediately
150
00:06:46,890 --> 00:06:49,940
once the script here is executed.
151
00:06:49,940 --> 00:06:52,260
This function will only be called
152
00:06:52,260 --> 00:06:54,820
as soon as the event happens.
153
00:06:54,820 --> 00:06:57,160
And you can also see that here in the code,
154
00:06:57,160 --> 00:07:00,070
because, well, we don't call the function anywhere
155
00:07:00,070 --> 00:07:02,960
using the parenthesis, right?
156
00:07:02,960 --> 00:07:06,830
And so, now, again, we're just really passing it
157
00:07:06,830 --> 00:07:09,053
into the addEventListener function.
158
00:07:10,890 --> 00:07:12,020
So this works just fine.
159
00:07:12,020 --> 00:07:14,750
Now, let's try here, another number.
160
00:07:14,750 --> 00:07:16,610
So now we get 99.
161
00:07:16,610 --> 00:07:20,800
And of course, we can also do some DOM manipulation here.
162
00:07:20,800 --> 00:07:22,530
For example, let's just, for example,
163
00:07:22,530 --> 00:07:27,250
grab this piece of code here and paste it here as well.
164
00:07:29,780 --> 00:07:31,210
Give it a save.
165
00:07:31,210 --> 00:07:33,100
And now when I click this here,
166
00:07:33,100 --> 00:07:36,030
not only the value from this input field
167
00:07:36,030 --> 00:07:37,660
will get logged to the console,
168
00:07:37,660 --> 00:07:40,200
but also this message here will change.
169
00:07:40,200 --> 00:07:42,163
So the text content of this element.
170
00:07:45,070 --> 00:07:48,520
So you see, correct number and now 22.
171
00:07:48,520 --> 00:07:52,963
Now, of course, this has nothing to do with the game yet.
172
00:07:54,210 --> 00:07:56,200
So I just wanted to show you that.
173
00:07:56,200 --> 00:07:59,580
But let me get rid of this, actually.
174
00:07:59,580 --> 00:08:03,870
But now let's actually start to slowly build up the game.
175
00:08:03,870 --> 00:08:05,060
So in the real game,
176
00:08:05,060 --> 00:08:06,317
when we click on this button here,
177
00:08:06,317 --> 00:08:09,710
of course, this number from this input field
178
00:08:09,710 --> 00:08:11,720
will have to get retrieved.
179
00:08:11,720 --> 00:08:13,200
So let's start with that.
180
00:08:13,200 --> 00:08:16,080
And so we already did this here,
181
00:08:16,080 --> 00:08:18,600
but instead of just logging it to the console,
182
00:08:18,600 --> 00:08:21,303
let's actually save it into a variable.
183
00:08:23,110 --> 00:08:28,050
So const, guess, and then equal this.
184
00:08:29,220 --> 00:08:30,090
Okay?
185
00:08:30,090 --> 00:08:33,713
And now let's log it to the console just so we see it.
186
00:08:34,790 --> 00:08:37,580
And so this should now do the exact same thing.
187
00:08:37,580 --> 00:08:40,570
But we first stored that value into a variable,
188
00:08:40,570 --> 00:08:42,553
and then we log it afterwards.
189
00:08:44,950 --> 00:08:46,360
All right.
190
00:08:46,360 --> 00:08:49,550
Now, remember how I said in the fundamental section,
191
00:08:49,550 --> 00:08:52,220
that usually whenever we get something
192
00:08:52,220 --> 00:08:55,770
from the user interface, for example, from an input field,
193
00:08:55,770 --> 00:08:58,030
it usually always is a string.
194
00:08:58,030 --> 00:08:59,830
So let me show that to you here now.
195
00:09:02,090 --> 00:09:03,810
So again, we use the type of operator
196
00:09:03,810 --> 00:09:06,080
that we already learned before.
197
00:09:06,080 --> 00:09:09,833
And now when I put this here, we indeed get a string.
198
00:09:11,160 --> 00:09:14,890
However, we will eventually have to compare this number here
199
00:09:14,890 --> 00:09:17,420
with a randomly generated number.
200
00:09:17,420 --> 00:09:19,583
So that's going to be basically the secret number
201
00:09:19,583 --> 00:09:21,063
that we will have to guess.
202
00:09:22,030 --> 00:09:25,420
And so if we want to compare numbers with numbers,
203
00:09:25,420 --> 00:09:28,223
we need to first convert this string to a number.
204
00:09:29,300 --> 00:09:32,270
So let's do that here, using the number of function
205
00:09:32,270 --> 00:09:34,603
that we also already used before.
206
00:09:35,620 --> 00:09:39,083
And so now, let's print both here.
207
00:09:40,338 --> 00:09:42,003
So the guess and then the type.
208
00:09:44,670 --> 00:09:46,420
And now we get five.
209
00:09:46,420 --> 00:09:48,520
And now it's also here in purple,
210
00:09:48,520 --> 00:09:51,480
and we get that it's a number.
211
00:09:51,480 --> 00:09:55,250
And now, let's start to implement the game logic
212
00:09:55,250 --> 00:09:56,480
here a little bit.
213
00:09:56,480 --> 00:09:58,100
But just the simplest case,
214
00:09:58,100 --> 00:10:02,320
which is the case that there's a actually no guess.
215
00:10:02,320 --> 00:10:04,620
So usually in an application like this,
216
00:10:04,620 --> 00:10:06,950
which has an input value from the user,
217
00:10:06,950 --> 00:10:07,960
the first thing to do
218
00:10:07,960 --> 00:10:10,940
is to check if there actually is a value.
219
00:10:10,940 --> 00:10:12,940
And if there is no value, well,
220
00:10:12,940 --> 00:10:16,970
then we can print something to the console as a response.
221
00:10:16,970 --> 00:10:21,463
So we can say, if there is no guess.
222
00:10:22,490 --> 00:10:25,203
And let me actually show you how that would look like.
223
00:10:26,050 --> 00:10:30,160
So if I click on the button now, indeed, we get zero,
224
00:10:30,160 --> 00:10:32,580
and zero is a false value.
225
00:10:32,580 --> 00:10:33,413
Okay?
226
00:10:33,413 --> 00:10:36,290
And so guess our here, in this logical context
227
00:10:36,290 --> 00:10:39,770
of the FL statement, will be false.
228
00:10:39,770 --> 00:10:42,920
So that's what we learned in the fundamental section, right?
229
00:10:42,920 --> 00:10:45,760
So any value that is here in this condition part
230
00:10:45,760 --> 00:10:48,370
will always get evaluated to a Boolean.
231
00:10:48,370 --> 00:10:53,250
And so since this guess, is zero, in this case,
232
00:10:53,250 --> 00:10:57,850
and zero is a false value, it will be converted to false.
233
00:10:57,850 --> 00:11:01,690
But we want something to happen whenever this is false.
234
00:11:01,690 --> 00:11:05,640
And so here, we actually want a true value, right?
235
00:11:05,640 --> 00:11:06,923
And so we simply use the negation operator
236
00:11:06,923 --> 00:11:11,923
to then invert this Boolean from false to true.
237
00:11:13,950 --> 00:11:17,410
So in this case, we can then print some sort of message
238
00:11:17,410 --> 00:11:21,490
here to our message field, or message element.
239
00:11:21,490 --> 00:11:24,090
And so let me, again, go ahead and copy it from here
240
00:11:24,970 --> 00:11:26,723
because we already did that before.
241
00:11:30,370 --> 00:11:33,983
So let's say no number.
242
00:11:35,310 --> 00:11:37,573
And then as always an emoji here.
243
00:11:39,300 --> 00:11:40,423
Let's do this one.
244
00:11:42,050 --> 00:11:44,273
Or actually, it's more like forbidden.
245
00:11:46,540 --> 00:11:47,853
So that's the one I used.
246
00:11:49,080 --> 00:11:50,340
Let's save it.
247
00:11:50,340 --> 00:11:54,330
And so now whenever I click this button, let's check it,
248
00:11:54,330 --> 00:11:57,370
then indeed, we get no number.
249
00:11:57,370 --> 00:11:58,680
Okay?
250
00:11:58,680 --> 00:12:02,360
So again, this works because zero is false
251
00:12:02,360 --> 00:12:05,250
And so guess here is false now.
252
00:12:05,250 --> 00:12:08,640
But then we use the NOT operator to convert it to true.
253
00:12:08,640 --> 00:12:12,640
And like this, we can then make this block of code execute.
254
00:12:12,640 --> 00:12:14,930
Because remember, it only executes
255
00:12:14,930 --> 00:12:18,340
whenever this whole condition here is true.
256
00:12:18,340 --> 00:12:19,173
Okay.
257
00:12:19,173 --> 00:12:22,190
And so with this, we implemented the first scenario.
258
00:12:22,190 --> 00:12:24,340
So again, usually, the first scenario
259
00:12:24,340 --> 00:12:27,410
is always to assume that there is actually no input,
260
00:12:27,410 --> 00:12:30,670
and then we need to respond to that somehow.
261
00:12:30,670 --> 00:12:31,670
Now, in the next video,
262
00:12:31,670 --> 00:12:34,290
we will then implement all the other scenarios,
263
00:12:34,290 --> 00:12:38,020
for example, where this guess here is actually correct.
264
00:12:38,020 --> 00:12:40,630
So where it's equal to the secret number.
265
00:12:40,630 --> 00:12:43,360
So we will have to generate that secret number then
266
00:12:43,360 --> 00:12:45,500
and compare it to the guess.
267
00:12:45,500 --> 00:12:47,853
But let's leave that to the next video.
19219
Can't find what you're looking for?
Get subtitles in any language from opensubtitles.com, and translate them here.