Intro
This article will help you setup event listeners for dynamic elements on the webpage using JQuery.
Pre-requisites
Basic knowledge of JQuery Selectors, Basic event handling in Javascript
Lets Start
- Create a basic html with our jQuery dependency
<html> <head> <!-- add jquery dependency --> <script src="https://code.jquery.com/jquery-3.6.0.slim.min.js"></script> </head> <body> <div class="main"> <!-- button will appear here --> </div> <script> let buttonHtml = `<button class="btn">Click to turn me RED</button>` // add a button 1 second after document is loaded $(document).ready(function () { setTimeout(() => { $(".main").append(buttonHtml); }, 1000) }) </script> </body> </html>
This code just adds a button with class btn
inside our main div.
Wrong Approach
- Let's start with what I was doing wrong earlier.
- Adding more lines to our script that should add a click listener to my button
// on click of our selector, turn our button RED $(".btn").on('click', function(){ $(this).css('background','red'); })
Well, See in action
Correct Approach
- I checked for jQuery documentation and found that there is also an event-delegation approach
// Taken from https://api.jquery.com/on/
Delegated event handlers have the advantage that they can process events from descendant elements that are added to the document at a later time.
So, all I had to do was add another parameter to our method and change the selector.
So Basically,
Tell our browser, that whenever there is a click event on our
.main
class element, check if it was made on the.btn
specifically.
So I replaced my previous code with this.
$('.main').on('click','.btn', function(){ $(this).css('background','red'); })
That was it. Boom!
Thank you note.
Thanks for reading. Like and follow for more such articles.
Happy to engage in healthy discussion in comments.
Top comments (0)