Me estoy poniendo furioso, tal vez alguien pueda ayudarme con esto.
Necesito volver a vincular el clic al enlace después de la llamada AJAX, pero por alguna razón no quiere funcionar.
Aquí está mi código:
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; }); }¿Alguna idea?
Gracias por las respuestas. Modifiqué el código, pero el problema sigue ahí:
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);ACTUALIZACIÓN el 31 de octubre de 2012
A partir de jQuery 1.7, el enfoque recomendado es utilizar on -
$(document).on('click', '.active', function () { // click handler code goes here });¿Puedes probar lo siguiente?
$('.active').live('click', function() { // click handler });Tendría que agregar el reenlace en el controlador de success si desea ejecutarlo después de la llamada Ajax:
success: function(data) { elem.replaceWith(data); $('.active').bind('click', /* some function needs to go here*/); } Dicho esto, en este caso, live() o delegate() son probablemente mejores opciones [ actualización: ahora que jQuery 1.7 está disponible, todo se puede hacer con .on() ] . Esto también evitaría la doble asignación de controladores de clics, en caso de que tenga otros enlaces .active que no hayan sido reemplazados.
Actualización: con respecto a su código actualizado: la forma en que está usando live anula su propósito. Por favor, lea su documentación . Lo que está haciendo es asignar un controlador de clics cuando se hace clic en el enlace, lo que significa que está agregando controladores de clics una y otra vez.
Esta es una versión mejorada de su código.
$('.active').live('click', function(event) { var elem = $(this); var url = $(this).attr('href'); $.ajax({ url: url, dataType: 'html', success: function(data) { elem.replaceWith(data); } }); event.preventDefault(); event.stopPropagation(); });