Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

jQuery on() method does not bind events like live() did

Tags:

jquery

As described on http://api.jquery.com/live/:

As of jQuery 1.7, the .live() method is deprecated. Use .on() to attach event handlers.

Right. So instead of

$('.dynamicallyCreatedElement').live('click', function(){   console.log('click'); }); 

I should use:

$('.dynamicallyCreatedElement').on('click', function(){   console.log('click'); }); 

However it does not bind event to elements created after on() calling. So is it really better live() method ?

Am I missing something ?

like image 466
hsz Avatar asked Apr 24 '12 09:04

hsz


2 Answers

To use on in the same manner as live used to work you need to use it like:

$(document).on("click", ".dynamicallyCreatedElement", function() {        console.log('click');  });   

So you bind the on handler to the document itself (or, actually, the container element where the new wlements will be "appearing" -- Thanks to @devnull69 for the clarification), then pass it an event type and the selector.

You'll find a couple of examples halfway through the live documentation page.

like image 98
Sergi Papaseit Avatar answered Sep 17 '22 18:09

Sergi Papaseit


$('#closestStaticParent').on('click', '.dynamicallyCreatedElement' function(){     console.log('click'); }); 
like image 36
elclanrs Avatar answered Sep 16 '22 18:09

elclanrs