Tuesday, 24 January 2017

jquery - Click event doesn't work on dynamically generated elements


















I was trying to generate a new tag with class name test in the

by clicking the button. I also defined a click event associated with test. But the event doesn't work.



Can anyone help?


Answer



The click() binding you're using is called a "direct" binding which will only attach the handler to elements that already exist. It won't get bound to elements created in the future. To do that, you'll have to create a "delegated" binding by using on().





Delegated events have the advantage that they can process events from descendant elements that are added to the document at a later time.




Source



Here's what you're looking for:






var counter = 0;

$("button").click(function() {
$("h2").append("

click me " + (++counter) + "

")
});

// With on():

$("h2").on("click", "p.test", function(){

alert($(this).text());
});








The above works for those using jQuery version 1.7+. If you're using an older version, refer to the previous answer below.







Previous Answer:



Try using live():



$("button").click(function(){
$("h2").html("

click me

")
});



$(".test").live('click', function(){
alert('you clicked me!');
});


Worked for me. Tried it with jsFiddle.



Or there's a new-fangled way of doing it with delegate():




$("h2").delegate("p", "click", function(){
alert('you clicked me again!');
});


An updated jsFiddle.


No comments:

Post a Comment

c++ - Does curly brackets matter for empty constructor?

Those brackets declare an empty, inline constructor. In that case, with them, the constructor does exist, it merely does nothing more than t...