我越来越愤怒 – 也许有人能够帮助我。
我需要在AJAX调用后重新绑定到链接,但由于某种原因,它不想工作。
这是我的代码:
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; }); }
任何想法?
function makeActive() { if ($('.active').length > 0) { $('.active').click(function() { var elem = $(this); var url = $(this).attr('href'); $.ajax({ url: url,success: function(data) { elem.replaceWith(data); } }); $('.active').live('click',makeActive); return false; }); } } $('.active').live('click',makeActive);
解决方法
如果要在Ajax调用后执行,则必须在成功处理程序中添加重新绑定:
success: function(data) { elem.replaceWith(data); $('.active').bind('click',/* some function needs to go here*/); }
也就是说,在这种情况下,live()
或delegate()
可能是更好的选择[更新:现在jQuery 1.7已经出来,所有事情都可以用.on()
]完成。这也将阻止点击处理程序的双重分配,以防止其他.active链接没有被替换
更新:关于你更新的代码:你正在使用的方式失败它的目的。请阅读documentation.您正在做的是在点击链接时分配点击处理程序,这意味着您一遍又一遍地添加点击处理程序。
这是您的代码的改进版本。
$('.active').live('click',function(event) { var elem = $(this); var url = $(this).attr('href'); $.ajax({ url: url,success: function(data) { elem.replaceWith(data); } }); event.preventDefault(); event.stopPropagation(); });