I'm getting furious - perhaps someone will be able to help me with this.
I need to re-bind the click to the link after AJAX call, but for some reason it doesn't want to work.
Here's my code:
if ($('.active').length > 0) {
$('.active').click(function() {
var elem = $(this);
var url = $(this).attr('href');
$.ajax({
url: url,
dataType: 'html',
success: function(data) {
elem.replaceWith(data);
}
});
$('.active').bind('click'); return false;
});
}
Any idea?
Thanks for the responses - I've amended the code, but the problem is still there:
function makeActive() {
if ($('.active').length > 0) {
$('.active').click(function() {
var elem = $(this);
var url = $(this).attr('href');
$.ajax({
url: url,
dataType: 'html',
success: function(data) {
elem.replaceWith(data);
}
});
$('.active').live('click', makeActive);
return false;
});
}
}
$('.active').live('click', makeActive);
UPDATE on October 31, 2012
Starting from jQuery 1.7, the recommended approach is to use
on
-Can you try the following ?
You would have to add the rebinding in the
success
handler if you want to execute it after the Ajax call:That said, in this case,
live()
ordelegate()
are probably better options [update: now that jQuery 1.7 is out, everything can be done with.on()
]. This would also prevent double assignment of click handlers, in case you have other.active
links that have not been replaced.Update: Regarding your updated code: The way you are using
live
defeats its purpose. Please read its documentation. What you are doing is assigning a click handler when the the link is clicked, which means that you are adding click handlers over and over again.This is an improved version of your code.