Event Example Part 2

Modern JavaScript Manipulating HTML Pages
11 minutes
Share the link to this page
Copied
  Completed
You need to have access to the item to view this lesson.
One-time Fee
$99.99
List Price:  $139.99
You save:  $40
€96.21
List Price:  €134.70
You save:  €38.49
£79.93
List Price:  £111.90
You save:  £31.97
CA$143.79
List Price:  CA$201.32
You save:  CA$57.52
A$160.48
List Price:  A$224.69
You save:  A$64.20
S$135.83
List Price:  S$190.17
You save:  S$54.33
HK$777.07
List Price:  HK$1,087.93
You save:  HK$310.86
CHF 89.45
List Price:  CHF 125.24
You save:  CHF 35.78
NOK kr1,141.95
List Price:  NOK kr1,598.78
You save:  NOK kr456.82
DKK kr717.64
List Price:  DKK kr1,004.72
You save:  DKK kr287.08
NZ$177.52
List Price:  NZ$248.53
You save:  NZ$71.01
د.إ367.25
List Price:  د.إ514.17
You save:  د.إ146.91
৳11,994.74
List Price:  ৳16,793.12
You save:  ৳4,798.37
₹8,496.63
List Price:  ₹11,895.62
You save:  ₹3,398.99
RM450.75
List Price:  RM631.07
You save:  RM180.32
₦155,628.43
List Price:  ₦217,886.03
You save:  ₦62,257.60
₨27,934.96
List Price:  ₨39,110.06
You save:  ₨11,175.10
฿3,444.45
List Price:  ฿4,822.37
You save:  ฿1,377.92
₺3,518.54
List Price:  ₺4,926.10
You save:  ₺1,407.55
B$617.53
List Price:  B$864.57
You save:  B$247.04
R1,837.80
List Price:  R2,572.99
You save:  R735.19
Лв188.31
List Price:  Лв263.64
You save:  Лв75.33
₩144,872.25
List Price:  ₩202,826.95
You save:  ₩57,954.69
₪364.89
List Price:  ₪510.86
You save:  ₪145.97
₱5,883.01
List Price:  ₱8,236.45
You save:  ₱2,353.44
¥15,672.80
List Price:  ¥21,942.55
You save:  ¥6,269.75
MX$2,028.91
List Price:  MX$2,840.56
You save:  MX$811.64
QR366.34
List Price:  QR512.89
You save:  QR146.55
P1,382.59
List Price:  P1,935.69
You save:  P553.09
KSh12,923.70
List Price:  KSh18,093.70
You save:  KSh5,170
E£5,091.27
List Price:  E£7,127.98
You save:  E£2,036.71
ብር12,764.56
List Price:  ብር17,870.89
You save:  ብር5,106.33
Kz91,790.82
List Price:  Kz128,510.82
You save:  Kz36,720
CLP$99,155.08
List Price:  CLP$138,821.08
You save:  CLP$39,666
CN¥729.81
List Price:  CN¥1,021.77
You save:  CN¥291.95
RD$6,104.52
List Price:  RD$8,546.58
You save:  RD$2,442.05
DA13,454.60
List Price:  DA18,836.98
You save:  DA5,382.37
FJ$232.11
List Price:  FJ$324.96
You save:  FJ$92.85
Q773.21
List Price:  Q1,082.52
You save:  Q309.31
GY$21,000.46
List Price:  GY$29,401.48
You save:  GY$8,401.02
ISK kr13,903.60
List Price:  ISK kr19,465.60
You save:  ISK kr5,562
DH1,007.40
List Price:  DH1,410.40
You save:  DH403
L1,841.78
List Price:  L2,578.57
You save:  L736.78
ден5,922.50
List Price:  ден8,291.74
You save:  ден2,369.23
MOP$803.42
List Price:  MOP$1,124.82
You save:  MOP$321.40
N$1,834.70
List Price:  N$2,568.66
You save:  N$733.95
C$3,694.32
List Price:  C$5,172.20
You save:  C$1,477.87
रु13,665.58
List Price:  रु19,132.35
You save:  रु5,466.77
S/374.71
List Price:  S/524.60
You save:  S/149.89
K406.86
List Price:  K569.63
You save:  K162.76
SAR375.72
List Price:  SAR526.02
You save:  SAR150.30
ZK2,777.96
List Price:  ZK3,889.25
You save:  ZK1,111.29
L478.81
List Price:  L670.35
You save:  L191.54
Kč2,418.25
List Price:  Kč3,385.65
You save:  Kč967.40
Ft39,800.47
List Price:  Ft55,722.25
You save:  Ft15,921.78
SEK kr1,103.66
List Price:  SEK kr1,545.17
You save:  SEK kr441.50
ARS$102,190.76
List Price:  ARS$143,071.15
You save:  ARS$40,880.39
Bs693.61
List Price:  Bs971.08
You save:  Bs277.47
COP$437,799.12
List Price:  COP$612,936.28
You save:  COP$175,137.16
₡50,480.33
List Price:  ₡70,674.48
You save:  ₡20,194.15
L2,548.03
List Price:  L3,567.35
You save:  L1,019.31
₲784,126.06
List Price:  ₲1,097,807.85
You save:  ₲313,681.79
$U4,460.41
List Price:  $U6,244.75
You save:  $U1,784.34
zł409.96
List Price:  zł573.96
You save:  zł164
Already have an account? Log In

Transcript

All right. Now one more thing I want to show you is, I mentioned that events bubble up, and so parents can handle events of their children. So let's take a look at that as well. Let's do something with the UL tag right here. We're going to do something with that element. We are going to have it handle the events for each of the Li tags.

Okay. So first let's select that element, query selector and that ul element is inside an article tag. So that should be that should define the path close enough to get the right one. And while with this HTML page, there is only one ul element anyway, so that's more precise than we need to be. Alright, so I have the UL node. Now let's go ahead and add an event listener to it.

This time, let's use a different event. Let's use double click. And that's defined by DBL. Click. Then we put a comma. Now the code we want to execute.

Before I enter this code, I want to give you a reminder, remember that the children of ul also has what we call text nodes. So for example, when we typed in ul code, there was a return right here, and then we typed in the Li tag. Well, that return becomes a text node. There's really no return at the end of this. That's becomes a text node as well. So the child nodes of ul are these three tags, but it also includes text nodes.

So we need to have some way to separate what we're going to do with those Li tags. So the idea is here that the UL node will listen for the double click event, then I'm going to have it do something to its children. But I only want to do it to the Li tags, not to the text nodes, they're a part of its children. So here's what I'm going to do function clared anonymous function curly braces. And then I'm simply going to check if you l dot child nodes. Now we need something to reference the child nodes because remember, child nodes returns an array of nodes.

So let me create one more variable Pull up here. We're going to call it click CMT for count, and let's set it equal to zero to start with. So let's put that in here. Not only are we learning about our event listeners, but we're using some of the JavaScript that we've learned in past videos as well. Now I want to check node type. I need that right next to the square bracket.

Because that's all part of the if statement. So I want to check node type and see if it's equal to one. If it's equal to one remember, then it's a regular elements. And so then we will go ahead and change that child node. And we'll just change the color. We'll set it equal to green.

Now, before we go any farther, let me save this. And let's go ahead and refresh this page and see what happens. Double click, double click, double click, it's not changing to green. So what's going on? Well, let's come back and look at this. Well click count starts equal to zero.

So it's only going to check the first child and that's all click count never increments. So let's increment it. Now we'll increment whether no type is equal to one or not. Because if it's not equal to one, we want it to go to the next number to grab the next Child. If it is equal to one, we want it to go to the next number to grab the next child as well. So let's try that now.

Save it, refresh, double click, nothing happens. Double click on changes to green, double click, nothing happens. Double click, the next one changes is green. See I'm clicking on this item here, but it changed this one down here because the parent is grabbing the event. The parent is listening for that event. And then the parent the code inside of that event listener is dealing with all of the children.

I can now double click again, double click again and the third one changes. Alright, let's enhance our code just a bit. We have to double click twice in order for it to change the color on the notes that we want to change, but we could correct that We could use a simple while loop and have it cycle through the click count until it finds a node that we can change. So wild ul dot child nodes. Click count.no type is not equal to one. So while it's not equal to one, we're going to simply increment the count.

So by doing that, then eventually we'll find one that is equal to one. Now another thing we should probably test here is click count is less than ul dot child nodes. We don't want it to go beyond the number of child nodes or we'll get in there. Now, that should change a color to green right away when we do a double click. However, this if statement is probably no longer necessary, because this while loop is making sure that we have one that has a known type of one. But I should change this if statement because when we get greater than the length, click counts going to be greater than the number of children that is in URL, this will still execute.

And so it'll try to change the color of something that does not exist. So using truthy and falsy, we can just change the if statement to this. This will check to see if this exists. If it does, it goes ahead and changes the color to green. If not, it doesn't try to change the color. So save it.

Refresh. Now when we double click Something didn't work. Let's check our console. Sure enough, we got an error cannot set property color of undefined. So let's go back and look at our code. What did we do wrong?

Now, I'm not sure why we're getting the error we are getting, but I do see that this is a problem here. I left off the dot for child nodes dot length. Let's see if that corrects it. Sure enough, because there was that problem in the JavaScript, it generated an error. However, sometimes it doesn't indicate the exact location where the problem occurred. So you have to look through your code, find the problem, and then fix it.

It looks like it's working. now. I'll double click again. Double click again. Now it does it right away. Alright, let me jump back to sublime.

One more thing I'd like to show you now. This is a a different type of event listener than we've done in the past. As you can see right now, I'm just calling a net when this JavaScript file loads. Now, we talked in a previous video that if this script file, were up here in the head tag, we would have a problem. Let's go ahead and take a look at that. Do any of our event listeners work?

Doesn't look like if we display the console cannot read property add event listener have no. So why are we getting that error? Well, if you remember, here's our first add eventlistener. Well, it says of No. So what it's saying is this doesn't exist. It's not able to find this because the h2 element hasn't even been drawn in the HTML page when this JavaScript file loads.

So this doesn't exist yet. So that's why they doesn't work. Instead of just calling a nit right away, we can use an event to determine when the page loads and then call the init function. So, we would do this by attaching any event listener to the window object, window dot add event listener, and the event is load. And then we'll call a knit. Now, this also illustrates that I can define a function and then call it by simply referencing that function.

I don't put the parentheses after it because that would cause the function to execute right away. I simply include the reference to the function. So window dot add eventlistener load in it. Let's see how that works. Now let's see if our events work. Sure enough, they work So that's another type of event listener that we can add to the window object.

And that can be used to determine if the page is loaded before we try executing any code that has to deal with the DOM. So we looked at a couple of methods for doing that we put the code file at the very end. Or we can listen for when the page loads. Alright, let's move on to the next topic.

Sign Up

Share

Share with friends, get 20% off
Invite your friends to LearnDesk learning marketplace. For each purchase they make, you get 20% off (upto $10) on your next purchase.