我越来越愤怒 – 也许有人能够帮助我。
我需要在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(); });
原文地址:https://www.jb51.cc/jquery/182331.html
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。