Welcome to the Treehouse Community
Want to collaborate on code errors? Have bugs you need feedback on? Looking for an extra set of eyes on your latest project? Get support with fellow developers, designers, and programmers of all backgrounds and skill levels here with the Treehouse Community! While you're at it, check out some resources Treehouse students have shared here.
Looking to learn something new?
Treehouse offers a seven day free trial for new students. Get access to thousands of hours of content and join thousands of Treehouse students and alumni in the community today.
Start your free trialaudreysalerno
4,289 PointsWhy not build out the html for $image entirely within the click function?
Is there a reason the img tag is added to $image and then appended to $overlay outside of the function on click? Is there a disadvantage to doing it like this, within the function?
$("#imageGallery a").click(function(event){
event.preventDefault();
var imageLocation = $(this).attr("href");
$image = $('<img>');
//add image to overlay
$overlay.append($image);
//Update overlay with the image linked in the link
$image.attr("src", imageLocation);
//Show the overlay.
$overlay.show()
//Get child's alt attribute and set caption
});
1 Answer
Christopher Aporta
24,258 PointsHi Audrey!
The reason you want to build the HTML for $image outside of the click function is because you only want to do it once. Keep in mind that when you're dealing with event handlers, everything inside of the function will run every time the event is fired.
Therefore, if the construction and appending of the HTML img element existed inside the function, a new img element would be built and appended every time we clicked on an anchor element. If we clicked 5 times, we'd have 5 img elements when we only wanted one!
All we really want the function to do is dynamically pass in the appropriate href values to the one img element that exists, and then show the overlay.
Does that make sense? It's been a while since I took this course so I'm probably a bit rusty on the details.
Best,
Chris
audreysalerno
4,289 Pointsaudreysalerno
4,289 PointsMakes total sense. Now that you said it, I'm having a "duh" moment. Thanks!
It's things like that which would be super handy to include in the videos... more of the WHY, instead of just "type along with me as we do A, B, C". That goes double for "why
event
is passed to the function" and "what theevent
object is. I happened to know about theevent
object prior to that video, but if people are starting out with just the JS Intro course under their belts, it hasn't been mentioned before, much less used. I noticed many people asked about it in the questions.